我已经读过this answer关于如何扩展内置类型的知识,但这只讲了一半。我们如何告诉TypeScript在哪里可以找到我们的全局定义?
我已经创建了一个文件
interface HTMLElement {
computedStyleMap(): any
}
然后尝试将其包含在include
中(不确定这是否是最佳选择):
{
"compilerOptions": {
...
},
"files": [
"src/index"
],
"include": [
"src/**/*.d.ts"
],
"exclude": [
"node_modules"
]
}
但是我的VS代码仍然抱怨:
即使它通过awesome-typescript-loader编译也没有错误或警告。
那么我该怎么做才能使语言服务正常运行?配置tsconfig以读取我所有的*.d.ts
文件的最佳方法是什么?
添加
///<reference path="cssom.d.ts"/>
文件的顶部同时满足编译器和语言服务的要求,但是我真的不想在各处添加这些<reference>
,因为我扩展了in / global类型。
答案 0 :(得分:3)
我认为您需要"typeRoots"
tsconfig编译器选项。我认为您可以通过将文件包含在typeRoots
数组中来解决此问题
"typeRoots": [
"src/cssom.d.ts"
]
或者您可以在typeRoots数组中简单地包含一个文件夹的路径,以将该文件夹中的所有类型包括在内。
偶然地,我只知道这一点,因为typescript-starter
项目会自动为您配置默认的typeRoots文件夹并说明如何使用它。非常有帮助。
我想值得注意的是,打字稿文档特别指出typeRoots
选项应包括文件夹路径列表,因此可能无法指向特定的*.d.ts
文件。
正如@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"
;我进行了测试,该扩展程序确实有所作为。