有没有办法在你的打样文件中创建一个定义全局可访问类型的文件?
我喜欢打字稿但发现当我想要真正的类型安全时,我必须明确地从整个系统中导入类型。这很烦人。
答案 0 :(得分:13)
有点晚了,但是,您可以在我注意到的项目中的任何位置添加file.d.ts,它将被提取。
例如,在我的项目中,我想要一个:
Optional<T> = T | null;
我不知道将其添加到何处,所以我在文件夹中添加了common.d.ts并添加:
declare type Optional<T> = T | null;
现在它已被拾取,没有错误。甚至不需要导入它。当然,这已经在vscode中进行了测试,不确定是否可以在您的编辑器中使用。
(当然,取决于文件的包含/排除规则,但大多数项目都包含所有* .ts)
答案 1 :(得分:12)
是的,这是可能的。您可以在此处找到所有信息:https://www.typescriptlang.org/docs/handbook/declaration-files/templates/global-modifying-module-d-ts.html
重要的是这个:
declare global {
/*~ Here, declare things that go in the global namespace, or augment
*~ existing declarations in the global namespace
*/
interface String {
fancyFormat(opts: StringFormatOptions): string;
}
}
答案 2 :(得分:3)
我发现接受的答案无效(也许需要完成某些配置?)。因此,稍作修改,我就可以使用它了(也许我也有一些奇怪的配置选项?让我知道它是否不起作用,我将删除此答案)。
types/global.d.ts
tsconfig.json
,并在"*": ["types/*.d.ts"]
下包含paths
。 (如果您愿意的话,您还应该能够直接处理创建的文件)。declare global
或类似文件的根中。现在您应该可以使用此文件中声明的类型(已通过打字稿3.9.6和3.7.5测试)。
示例文件:
// global.d.ts
declare interface Foo {
bar: string;
fooBar: string;
}
您的tsconfig
应该是什么样子:
[...]
"paths": {
"*": ["types/*.d.ts"]
},
[...]