我使用import * as ss from 'simple-ajax-uploader'
语法导入无类型的JS NPM模块。我在/scripts/@types/simple-ajax-uploader/index.d.ts
创建了一个类型定义文件,我希望VS Code能够根据以下tsconfig.json
进行识别:
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "es2015.promise", "es5"],
"moduleResolution": "node",
"experimentalDecorators": true,
"typeRoots": [
"./node_modules/@types/",
"./scripts/@types/"
],
"sourceMap": true,
"baseUrl": ".",
"jsx": "react"
},
"compileOnSave": false
}
如果我执行以下其他或,我做获取智能感知
node_modules/@types/simple-ajax-uploader
import
(因此将ss
视为全局变量)。但是,我无法使用导入来获取本地类型定义。我的模块编译,但是当我输入ss.
时,我没有得到任何智能感知 - 该变量显然被视为any
。
我的(迄今为止最小的)定义文件,它的价值是什么:
export as namespace ss;
export interface SimpleUploadOptions {
// TODO
}
export class SimpleUpload {
constructor (options: SimpleUploadOptions)
}
答案 0 :(得分:0)
事实证明typeRoots
仅用于加载全局定义的标识符的声明(因此当我删除import语句时它的工作原理)。对于导入的模块,您需要使用paths
中的tsconfig.json
属性:
"paths" :{
"*": ["./scripts/@types/*", "*"]
}
这告诉编译器在执行模块解析时查看指定的文件夹(除了默认位置,例如node_modules
)。
(感谢https://stackoverflow.com/a/40326719/3248302指出我正确的方向。)