我正在尝试为没有它们的包提供打字:
error TS7016: Could not find a declaration file for module 'inputmask-core'. './node_modules/inputmask-core/lib/index.js' implicitly has an 'any' type.
Try `npm install @types/inputmask-core` if it exists or add a new declaration (.d.ts) file containing `declare module 'inputmask-core';`
我在webpack中使用ts-loader和typescript 2.4.2,我在tsconfig.json中设置了以下类型的根:
"typeRoots": [
"./node_modules/@types",
"./src/client/types"
]
我试图模仿node_modules/@types
中的包结构:
src/client/types
|--inputmask-core
|--index.d.ts
index.d.ts
中的以下内容:
declare class InputMask {}
export default InputMask;
但错误仍然存在。我究竟做错了什么?我应该在哪里放置这些自定义.d.ts文件?
node_modules/@types
和任何其他类型的根有什么区别?为什么TypeScript会以不同的方式对待它们?
答案 0 :(得分:4)
使用路径代替typeRoots-
通过https://github.com/Microsoft/TypeScript/issues/22217#issuecomment-369783776
“ typeRoots”用于全局代码。即是某种东西 在全局名称空间中声明,并且您想要包含它。对于 模块,它们有自己的作用域,您只需要路径映射即可。 像这样:
{
"compilerOptions": {
"target": "es2017",
"baseUrl": "./",
"paths": {
"*" : ["src/client/@custom_types/*"]
}
},
"exclude": ["node_modules", "src/client/@custom_types", ...]
}
注意:路径需要baseUrl,您可能还希望添加要排除的目录。
答案 1 :(得分:2)
可能的解决方案:将以下内容放在index.d.ts中,它将编译:
declare module "inputmask-core" {
declare class InputMask {}
export default InputMask;
}
我仍然不理解node_modules/@types
获得的特殊处理。
答案 2 :(得分:2)
有很多包没有 typescript 包,所以要解决这个问题,只需更改 .tsconfig 上的 compilerOptions,strict should be false