与模块类似地声明子模块的类型

时间:2018-10-16 13:16:58

标签: typescript typescript-typings

鉴于有一个第三方模块foo没有为foo/src键入内容,而我需要导入一个子模式并以与主模块类似的方式键入它:

index.ts

import * as foo from "foo/src";

console.log(foo);

custom_typings / foo-src.d.ts

declare module "foo/src" {
  import * as foo from "foo";
  export = foo;
}

tsconfig.json

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "strict": true,
    "baseUrl": "./",
    "paths": {
      "*" : ["custom_typings/*"]
    }
  },
  "files": [
    "index.ts"
  ]
}

我遇到错误:

  

找不到模块'foo / src'的声明文件。 '... / node_modules / foo / src / index.js'隐式具有'any'类型。

     

尝试npm install @types/foo(如果存在)或添加包含declare module 'foo/src';的新声明(.d.ts)

为什么foo/src导入时会忽略 custom_typings / foo-src.d.ts 声明文件?即使该声明有误,也必须为入门者识别。

1 个答案:

答案 0 :(得分:1)

如果启用traceResolution编译器选项,则会看到custom_typings/foo-src.d.ts的错误路径由baseUrlpaths设置加载:文件应该位于custom_typings/foo/src.d.tscustom_typings/foo/src/index.d.ts。加载文件的其他可能方式包括将其添加到files / include或使用自定义typeRoots;您没有任何一个设置。