导入的JS模块的本地类型定义无法识别

问题描述 投票:1回答:1

我正在使用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
}

如果我做以下其中一项,我会得到intellisense:

  1. 将定义文件放在node_modules/@types/simple-ajax-uploader
  2. 删除import(因此将ss视为全局变量)。

但是,我无法获取本地类型定义以使用导入。我的模块编译,但是当我输入ss.时我没有得到任何智能感知 - 这个变量显然被视为any

我的(迄今为止最小的)定义文件,它的价值:

export as namespace ss;

export interface SimpleUploadOptions {
    // TODO
}   

export class SimpleUpload {
    constructor (options: SimpleUploadOptions)
}
typescript visual-studio-code
1个回答
0
投票

事实证明,typeRoots仅用于加载全局定义的标识符的声明(因此当我删除import语句时它的工作原理)。对于导入的模块,您需要在paths中使用tsconfig.json属性:

"paths" :{
  "*": ["./scripts/@types/*", "*"]
}

这告诉编译器在执行模块解析时查看指定的文件夹(除了默认位置,例如node_modules)。

(感谢https://stackoverflow.com/a/40326719/3248302指出我正确的方向。)

© www.soinside.com 2019 - 2024. All rights reserved.