2017-07-31 187 views
1

我正在使用Moment.js处理我的TypeScript项目中的日期时间对象。我想定义一个对象类型,该对象类型的键值为Moment如何将外部类型导入到全局.d.ts文件中

但是,当我将以下内容添加到全局定义文件(test.d.ts)时,该文件中的任何接口都不在该项目的任何位置。

import { Moment } from 'moment'; 

interface Test { 
    date: Moment; 
} 

当我尝试使用该接口在.ts.tsx文件我得到这个打字稿错误:

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

无论VSCode的打字稿错误检查,也不TSLint显示的代码的任何问题。

如何从外部模块导入用于全局定义文件的类型?

+0

我会检查tsconfig文件。在编译器选项 - typeroot你应该有@types路径和类型的路径 – kimy82

+0

@ kimy82,我不认为这个问题在那里。我可以在整个项目中导入时间,但我无法将其导入到项目的'.d.ts'定义文件中,以在我的项目中使用'Moment'类型定义全局类型。只要我不尝试导入外部类型,我的'.d.ts'文件的其余部分都可以在没有配置的情况下找到。 – keawade

+0

你的'tsconfig.json'项目中是否包含全局'd.ts'文件? –

回答

2

当文件具有顶级importexport语句时,它被视为模块。您感兴趣的所有内容(类型,接口等)需要在该文件中显式导出并导入需要这些类型的文件中。

// 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 
}; 
+0

解决了这个问题,谢谢! 现在不得不手动导出所有接口,这有点令人沮丧,因为我只导入了一件东​​西。 – keawade