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
};
