如何使TypeScript语言服务不抱怨全局类型?

时间:2018-08-23 21:37:23

标签: typescript

我已经读过this answer关于如何扩展内置类型的知识,但这只讲了一半。我们如何告诉TypeScript在哪里可以找到我们的全局定义?

我已经创建了一个文件

src / cssom.d.ts

interface HTMLElement {
    computedStyleMap(): any
}

然后尝试将其包含在include中(不确定这是否是最佳选择):

tsconfig.json

{
    "compilerOptions": {
        ...
    },
    "files": [
        "src/index"
    ],
    "include": [
        "src/**/*.d.ts"
    ],
    "exclude": [
        "node_modules"
    ]
}

但是我的VS代码仍然抱怨:

enter image description here

即使它通过awesome-typescript-loader编译也没有错误或警告。

那么我该怎么做才能使语言服务正常运行?配置tsconfig以读取我所有的*.d.ts文件的最佳方法是什么?


添加

///<reference path="cssom.d.ts"/>

文件的顶部同时满足编译器和语言服务的要求,但是我真的不想在各处添加这些<reference>,因为我扩展了in / global类型。

2 个答案:

答案 0 :(得分:3)

我认为您需要"typeRoots" tsconfig编译器选项。我认为您可以通过将文件包含在typeRoots数组中来解决此问题

"typeRoots": [
  "src/cssom.d.ts"
]

或者您可以在typeRoots数组中简单地包含一个文件夹的路径,以将该文件夹中的所有类型包括在内。

更新:

偶然地,我只知道这一点,因为typescript-starter项目会自动为您配置默认的typeRoots文件夹并说明如何使用它。非常有帮助。

更新2:

我想值得注意的是,打字稿文档特别指出typeRoots选项应包括文件夹路径列表,因此可能无法指向特定的*.d.ts文件。

更新3:

正如@mpen指出的那样,包括您自己的typeRoots将覆盖默认的node_modules/@types typeRoot。因此,您还需要专门包含该typeRoot:

"typeRoots": ["node_modules/@types", "src/types"]

答案 1 :(得分:1)

我认为屏幕快照中显示的tsx文件不是tsconfig.json定义的项目的一部分,因为Michael Lisa John Francesca 或与files匹配的文件均未引用该文件。您的includes应该更改为"files";我进行了测试,该扩展程序确实有所作为。