Typescript 外部npm依赖项中的类型脚本错误
我有一个Typescript 外部npm依赖项中的类型脚本错误,typescript,Typescript,我有一个tsconfig.json文件,其中不包括: "exclude": [ "node_modules", "**/*-test.ts", "typings/*", "**/*.d.ts" ] 然而,在尝试传输和lint时,我得到了以下错误: node_modules/aws sdk/lib/request.d.ts(166,16):错误TS2304:找不到名称“Promise” 这有意义吗?我认为基于上述排除,应该排除外部依赖中的任何错误 p、 s.代码(包括第三方DEP
tsconfig.json
文件,其中不包括:
"exclude": [
"node_modules",
"**/*-test.ts",
"typings/*",
"**/*.d.ts"
]
然而,在尝试传输和lint时,我得到了以下错误:
node_modules/aws sdk/lib/request.d.ts(166,16):错误TS2304:找不到名称“Promise”
这有意义吗?我认为基于上述排除,应该排除外部依赖中的任何错误
p、 s.代码(包括第三方DEP)运行良好排除部分告诉编译器哪些文件/文件夹不需要编译,但如果正在编译的文件正在使用排除列表中的文件,它仍将被编译,或者如它所述: 通过“文件”包含的文件引用的任何文件,或 “包括”属性也包括在内。类似地,如果文件B.ts是 被另一个文件A.ts引用,则不能排除B.ts,除非 引用文件A.ts也在“排除”列表中指定 如果您使用的库使用的是
Promise
,那么您最好将es6
作为目标,这将使此错误消失,但如果您不愿意,则可以使用以下选项:
跳过所有声明文件(*.d.ts)的类型检查
编辑 在github自述文件中,它下面的部分清楚地说明: 您的tsconfig.json或jsconfig.json包括“dom”和 compilerOptions.lib下的“es2015.promise”
尝试将以下代码添加到tsconfig.json:
"compilerOptions": {
"lib": [
"es5",
"es2015.promise"
]
}
我的目标是Node 4.x,所以我不能访问es6,但像AWS resolve WRT这样受欢迎的外部方不应该自己做出承诺吗?同样值得一提的是,我在代码中使用蓝鸟作为承诺。。。虽然可能不是在所有引用此依赖关系的模块中。Bluebird不应该使用“Promise”为第三方库提供定义吗?aws库不知道您正在使用Bluebird,所以它没有导入它(我猜),这就是为什么它不可用的原因。是的,这一部分很有意义,但如果我导入Bluebird和aws(Bluebird确实定义了“Promise”)那么这个错误不应该避免吗?我没有确认在我导入
aws sdk
的任何情况下,我也会导入import*作为“bluebird”
的承诺。在您的模块中导入bluebird不会使它在您导入的其他模块中可用。例如,也许aws库实际上使用的是bluebird本身,但与您的版本不同?也许它使用了另一个promise库。好吧,这是我最初假设的,但它是行为不端的,对吗?它是假设但不是定义承诺定义。