Pesquisa de site

typescript - Como importar um tipo externo para um arquivo global .d.ts


Estou usando Moment.js para manipular objetos de data e hora no meu projeto TypeScript. Gostaria de definir um tipo de objeto que tenha uma chave com um valor do tipo Moment.

No entanto, quando adiciono o seguinte a um arquivo de definição global (test.d.ts), nenhuma das interfaces nesse arquivo é encontrada em qualquer lugar do projeto.

import { Moment } from 'moment';

interface Test {
  date: Moment;
}

Quando tento usar a interface em um arquivo .ts ou .tsx, recebo este erro do TypeScript:

[at-loader] ./src/<examplefilename>.tsx:91:26 
    TS2304: Cannot find name 'Test'. 

Nem a verificação de erros do TypeScript no VSCode nem o TSLint mostram quaisquer problemas com o código.

Como posso importar um tipo de um módulo externo para usar em um arquivo de definição global?

Resposta #1

Com o TypeScript 3.3+ (e talvez desde a 2.4, porque é a versão que adicionou suporte para importações dinâmicas), você tem maneiras melhores de resolver este problema, usando qualquer um dos seguintes:

interface Test {
  date: import('moment').Moment;
}

ou

type Moment = import('moment').Moment;
interface Test {
  date: Moment;
}

sem necessidade de exportar nenhuma interface ;)

Resposta #2

Aqui está um exemplo de um arquivo global.d.ts em um projeto Create React App:

declare type RouteProps = import("react-router-dom").RouteProps;

declare interface Xyz extends RouteProps {
  yada: string;
}

Resposta #3

Quando um arquivo possui uma declaração de import ou export de nível superior, ele é considerado um módulo. Todo o seu conteúdo (tipos, interfaces, etc.) que você tenha interesse precisa ser exportado explicitamente nesse arquivo e importado nos arquivos que precisarem dos tipos.

// types.d.ts
import { Thingy } from 'sick-lib';

export declare interface IInterface {
  foo: any;
  bar: any;
  baz: Thingy;
}

// main.ts
import { IInterface } from 'types';

const xyz: IInterface = {
  foo: true,
  bar: false
};

Artigos relacionados