Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 外部npm依赖项中的类型脚本错误_Typescript - Fatal编程技术网

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库。好吧,这是我最初假设的,但它是行为不端的,对吗?它是假设但不是定义承诺定义。