打字稿中的全局类型

时间:2017-03-23 19:07:23

标签: typescript typescript-typings

有没有办法在你的打样文件中创建一个定义全局可访问类型的文件?

我喜欢打字稿但发现当我想要真正的类型安全时,我必须明确地从整个系统中导入类型。这很烦人。

3 个答案:

答案 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)

我发现接受的答案无效(也许需要完成某些配置?)。因此,稍作修改,我就可以使用它了(也许我也有一些奇怪的配置选项?让我知道它是否不起作用,我将删除此答案)。

  1. 在适当的文件夹中创建定义文件。我将使用types/global.d.ts
  2. 检查您的tsconfig.json,并在"*": ["types/*.d.ts"]下包含paths。 (如果您愿意的话,您还应该能够直接处理创建的文件)。
  3. 将全局定义直接放入文件 declare global或类似文件的根中。

现在您应该可以使用此文件中声明的类型(已通过打字稿3.9.6和3.7.5测试)。

示例文件:

// global.d.ts
declare interface Foo {
    bar: string;
    fooBar: string;
}

您的tsconfig应该是什么样子:

[...]
"paths": {
    "*": ["types/*.d.ts"]
},
[...]