AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-6469472

Humberto's questions

Martin Hope
Humberto
Asked: 2025-04-09 00:25:46 +0800 CST

Crie um suplemento básico de conteúdo da Web sem o Visual Studio e uma máquina Windows

  • 5

Estou tentando desenvolver um suplemento de conteúdo seguindo a documentação oficial . A seção de implementação afirma que apenas algumas alterações são necessárias:

  • Para o elemento OfficeApp, defina o atributo xsi:type como "ContentApp".
  • No DefaultSettingselemento, adicione os elementos RequestedHeighte RequestedWidth.

Na mesma seção, estão listados dois suplementos básicos baseados em conteúdo para PowerPoint e Excel, mas, infelizmente, eles são voltados para o Visual Studio e eu não tenho uma máquina Windows. Há também uma referência a um exemplo de 9 anos chamado Excel-Content-Add-in-Humongous-Insurance , cujo manifesto parece bastante desatualizado.

Decidi experimentar usar o Yeoman e o VScode. Como o yo officeescritório não oferece um starter para o Add-in baseado em conteúdo, optei por usar:

? Choose a project type: Office Add-in Task Pane project using React framework
? Choose a script type: TypeScript
? What do you want to name your add-in? my-content-addin
? Which Office client application would you like to support? Powerpoint

Seguindo a documentação listada acima, alterei o xsi:typedo OfficeAppelemento para o ContentAppe adicionei os elementos RequestedHeighte RequestedWidthao DefaultSettingselemento.

Além disso, notei que o manifesto Excel-Content-Add-in-Humongous-Insurance não tinha o seguinte esquema no OfficeApp:

xmlns:ov="http://schemas.microsoft.com/office/taskpaneappversionoverrides"

Verifiquei o repositório office-addin-manifest e não consegui encontrar uma alternativa para suplementos de conteúdo, por exemplo, .../contentappversionoverrides. Encontrei apenas um .../mailappversionoverrides.

Também notei que o manifesto Excel-Content-Add-in-Humongous-Insurance não tinha esse VersionOverrideselemento, então o removi do meu arquivo gerado manifest.xml. Então, terminei com:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OfficeApp 
  xmlns="http://schemas.microsoft.com/office/appforoffice/1.1" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:bt="http://schemas.microsoft.com/office/officeappbasictypes/1.0" 
  xsi:type="ContentApp">
  <Id>9e2e38ec-67af-43e6-8aeb-c8c3e22b86bd</Id>
  <Version>1.0.0.0</Version>
  <ProviderName>Contoso</ProviderName>
  <DefaultLocale>en-US</DefaultLocale>
  <DisplayName DefaultValue="my-content-addin"/>
  <Description DefaultValue="A template to get started."/>
  <IconUrl DefaultValue="https://localhost:3000/assets/icon-32.png"/>
  <HighResolutionIconUrl DefaultValue="https://localhost:3000/assets/icon-64.png"/>
  <SupportUrl DefaultValue="https://www.contoso.com/help"/>
  <AppDomains>
    <AppDomain>https://www.contoso.com</AppDomain>
  </AppDomains>
  <Hosts>
    <Host Name="Presentation"/>
  </Hosts>
  <DefaultSettings>
    <SourceLocation DefaultValue="https://localhost:3000/taskpane.html"/>
    <RequestedHeight>400</RequestedHeight>
    <RequestedWidth>400</RequestedWidth>
  </DefaultSettings>
  <Permissions>ReadWriteDocument</Permissions>
</OfficeApp>

Depois disso, tentei validar o manifesto e recebi estes erros:

Error #1: 
XML Schema Validation Error: Error found during XML Schema validation.
  - Details: The element 'DefaultSettings' in namespace 'http://schemas.microsoft.com/office/appforoffice/1.1' has invalid child element 'RequestedWidth' in namespace 'http://schemas.microsoft.com/office/appforoffice/1.1'.
  - Line: 25
  - Column: 6

Error #2: 
XML Schema Violation: Your manifest does not adhere to the current set of XML schema definitions for Office Add-in manifests.

Removi o módulo " , RequestedWidthembora pareça conhecido " , e tentei novamente. Desta vez, o manifesto era válido. Então, executei e meu suplemento foi adicionado ao slide atual automaticamente.manifestHandlerXml.tsoffice-addin-manifestnpm start

Este é meu manifest.xml final

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OfficeApp 
  xmlns="http://schemas.microsoft.com/office/appforoffice/1.1" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:bt="http://schemas.microsoft.com/office/officeappbasictypes/1.0" 
  xsi:type="ContentApp">
  <Id>9e2e38ec-67af-43e6-8aeb-c8c3e22b86bd</Id>
  <Version>1.0.0.0</Version>
  <ProviderName>Contoso</ProviderName>
  <DefaultLocale>en-US</DefaultLocale>
  <DisplayName DefaultValue="my-content-addin"/>
  <Description DefaultValue="A template to get started."/>
  <IconUrl DefaultValue="https://localhost:3000/assets/icon-32.png"/>
  <HighResolutionIconUrl DefaultValue="https://localhost:3000/assets/icon-64.png"/>
  <SupportUrl DefaultValue="https://www.contoso.com/help"/>
  <AppDomains>
    <AppDomain>https://www.contoso.com</AppDomain>
  </AppDomains>
  <Hosts>
    <Host Name="Presentation"/>
  </Hosts>
  <DefaultSettings>
    <SourceLocation DefaultValue="https://localhost:3000/taskpane.html"/>
    <RequestedHeight>400</RequestedHeight>
  </DefaultSettings>
  <Permissions>ReadWriteDocument</Permissions>

</OfficeApp>

Como posso especificar uma largura padrão para meu suplemento de conteúdo?

Como posso inserir meu suplemento somente quando clico em um comando da Faixa de Opções, como a demonstração padrão do Painel de Tarefas, que abre o painel de tarefas?

Na demonstração do Yeoman Taskpane, VersionOverridesé necessário um esquema xmlns="http://schemas.microsoft.com/office/taskpaneappversionoverrides". Qual seria a alternativa para o Controlelemento de ação: <Action xsi:type="ShowTaskpane">em um suplemento baseado em conteúdo?

insira a descrição da imagem aqui

office-js
  • 1 respostas
  • 20 Views
Martin Hope
Humberto
Asked: 2024-08-29 21:43:50 +0800 CST

Inferência de tipo para valor de parâmetro de preenchimento automático de um método sobrecarregado

  • 6

Estou tentando adicionar algum suporte de preenchimento automático para um parâmetro de método genérico

 subscribeToTelemetry<T extends keyof TypeMap>(name: T): Stream<TypeMap[T]>;
 subscribeToTelemetry<T extends NonNullable<{}>>(name: EntityName<T>): Stream<T>; 

Em poucas palavras, se nenhum tipo for fornecido, subscribeToTelemetryo tipo de retorno de deve ser inferido com base no nome e em alguns tipos injetados/gerados automaticamente disponíveis. Além disso, possíveis sugestões de nomes devem ser feitas usando os tipos injetados/gerados automaticamente disponíveis. Por exemplo, usando o seguinte tipo:

type TypeMap = {
    ranger1: RangerTelemetry,
    ranger2: RangerTelemetry,
    mavic2: DroneTelemetry
};

e o seguinte código

// should suggest: ['mavic2' | 'ranger2' | 'ranger1'] since no type T is provided 
const myStream1 = r.subscribeToTelemetry('ranger1'); // myStream1: Stream<RangerTelemetry

O valor sugerido deve ser ['mavic2' | 'ranger2' | 'ranger1'] já que nenhum tipo T é fornecido, e o tipo myStream1 seráStream<RangerTelemetry>

Pelo contrário, se fornecermos um tipo subscribeToTelemetry e considerarmos o tipo injetado/gerado automaticamente disponível

const entityNames = {
    RangerTelemetry: ['ranger1', 'ranger2', 'ranger3'],
    DroneTelemetry: ['mavic1', 'mavic2', 'mavic3'],
} as const;

e alguns outros tipos de trics (veja o link do playground), usando o seguinte código

// should suggest only: ['mavic1' | 'mavic2' | 'mavic3'] since type T is provided as DroneTelemetry,
const myStream3 = r.subscribeToTelemetry<DroneTelemetry>('mavic1');

Deveríamos sugerir: ['mavic1' | 'mavic2' | 'mavic3'] já que o tipo DroneTelemetryfoi fornecido, mas ['mavic1' | 'mavic2' | 'mavic3', 'ranger1', 'ranger2', 'ranger3'] é mostrado em vez disso. O tipo de myStream3seráStream<DroneTelemetry>

Tenho várias variantes para a implementação da assinatura do subscribeToTelemetrymétodo sobrecarregado, mas não consigo fornecer as sugestões corretas ao fornecer um tipo. Sempre recebo a sugestão dos rangers, mesmo quando especifico DroneTelemetrycomo tipo.

class Registry {
    subscribeToTelemetry<T extends keyof TypeMap>(name: T): Stream<TypeMap[T]>;
    subscribeToTelemetry<T extends NonNullable<{}>>(name: EntityName<T>): Stream<T>;
    subscribeToTelemetry<T extends NonNullable<{}>>(name: EntityName<T>): Stream<T> {
        return new Stream<T>(name); 
    }
}

Se alguém tiver alguma sugestão, agradeceria qualquer ajuda

Humberto

Aqui está o código completo:

type DroneTelemetry = { kind: 'DroneTelemetry', batteryLevel: number, velocity: number, location: {latitude: number, longitude: number}}
type RangerTelemetry = { kind: 'RangerTelemetry', velocity: number, location: {latitude: number, longitude: number}}


////// the entity names and type mapping will be autogenerated
const entityNames = {
    RangerTelemetry: ['ranger1', 'ranger2', 'ranger3'],
    DroneTelemetry: ['mavic1', 'mavic2', 'mavic3'],
} as const;

type TypeMap = {
    ranger1: RangerTelemetry,
    ranger2: RangerTelemetry,
    mavic2: DroneTelemetry
};
////////

// Define the types for the keys and values of the mapping
type EntityNames = typeof entityNames;
type EntityKeys = keyof EntityNames;
type EntityValues<T extends EntityKeys> = EntityNames[T][number];

// Define a mapping from type aliases to their corresponding keys
type TypeToKey<T> = T extends { kind: infer K } ? K : never;

type ExtractEntitiesNames<T> = TypeToKey<T> extends keyof EntityNames ? EntityValues<TypeToKey<T>> : never;
type EntityName<T> = ExtractEntitiesNames<T> |  (string  & {});

/////////////////////////////////////////////////////////////////////

class Stream<T> {
    name: string
    constructor(name: string){
        this.name = name
    }
    getLastValue() {
        return {} as T // dummy impl
    }
}

class Registry {
    subscribeToTelemetry<T extends keyof TypeMap>(name: T): Stream<TypeMap[T]>;
    subscribeToTelemetry<T extends NonNullable<{}>>(name: EntityName<T>): Stream<T>;
    subscribeToTelemetry<T extends NonNullable<{}>>(name: EntityName<T>): Stream<T> {
        return new Stream<T>(name); 
    }
}

const r = new Registry();
// should suggest: ['mavic2' | 'ranger2' | 'ranger1'] since no type T is provided // OK
const myStream1 = r.subscribeToTelemetry('ranger1'); // myStream1 type will be Stream<RangerTelemetry>

// should suggest: ['mavic2' | 'ranger2' | 'ranger1'] since no type T is provided // OK
const myStream2 = r.subscribeToTelemetry('ranger2'); // myStream2 type will be Stream<RangerTelemetry>

 // should suggest only: ['mavic1' | 'mavic2' | 'mavic3'] since type T is provided as DroneTelemetry,
 // but ['mavic1' | 'mavic2' | 'mavic3', 'ranger1', 'ranger2', 'ranger3'] is shown instead.                // WRONG
const myStream3 = r.subscribeToTelemetry<DroneTelemetry>('mavic1'); // myStream3 type will be Stream<RangerTelemetry>

Aqui está um ts-playground com o código completo

typescript
  • 1 respostas
  • 43 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve