我正在使用Moment.js处理我的TypeScript项目中的datetime对象。我想定义一个对象类型,其键值的类型为Moment
。
但是,当我将以下内容添加到全局定义文件(test.d.ts
)时,在该项目中的任何位置都找不到该文件中的任何接口。
import { Moment } from 'moment';
interface Test {
date: Moment;
}
当我尝试在.ts
或.tsx
文件中使用该界面时,我收到此TypeScript错误:
[at-loader] ./src/<examplefilename>.tsx:91:26
TS2304: Cannot find name 'Test'.
VSCode的TypeScript错误检查和TSLint都没有显示代码的任何问题。
如何从外部模块导入类型以用于全局定义文件?
答案 0 :(得分:4)
当文件具有顶级import
或export
语句时,它被视为模块。您感兴趣的所有“内容(类型,接口等)”需要在该文件中显式导出,并导入到需要这些类型的文件中。
// 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
};
答案 1 :(得分:3)
使用TypeScript 3.3+(可能是从2.4开始,因为它是添加了对动态导入的支持的版本),您可以使用以下两种方法来解决此问题:
interface Test {
date: import('moment').Moment;
}
或
type Moment = import('moment').Moment;
interface Test {
date: Moment;
}
无需导出任何接口;)
答案 2 :(得分:0)
这是Create React App项目中一个global.d.ts
文件的示例:
declare type RouteProps = import("react-router-dom").RouteProps;
declare interface Xyz extends RouteProps {
yada: string;
}