在转换为 Typescript 的过程中,我正在尝试为工作中的 Javascript 文件添加类型。但是,我无法识别声明文件。
这是我的文件结构
- js
- Foo.js
- 打字
- 傅
- index.d.ts
- 傅
- index.ts
- package.json
- tsconfig.json
Foo.js
module.exports = function Foo() {
return 'Bar';
};
index.d.ts
export = Foo;
declare function Foo(): string;
index.ts
import Foo = require('./js/Foo')
console.log(Foo());
tsconfig.json
{
"compilerOptions": {
"typeRoots": ["./typings"],
"target": "es5",
"strict": true,
"baseUrl": "./",
"paths": {
"*": ["typings/*"]
}
}
}
package.json
{
"name": "fail",
"version": "1.0.0",
"description": "",
"main": "index.ts",
"scripts": {
"tsc": "tsc"
},
"author": "",
"license": "MIT",
"dependencies": {
"typescript": "^3.1.4"
}
}
这里是重现我的问题的repo
https://github.com/erisman20/typings_help
编辑:这是我得到的错误
错误 TS7016:找不到模块“./js/Foo.js”的声明文件。 '....../js/Foo.js' 隐式具有 'any' 类型。
最佳答案
为诸如 './js/Foo'
之类的相对导入提供声明的唯一方法是在导入路径中实际拥有声明文件(加上 .d.ts
或 /index.d.ts
) 或者根据您的 rootDirs
选项将其虚拟地放在导入路径中。 typeRoots
和 baseUrl
/paths
在这种情况下都不起作用:baseUrl
/paths
仅影响“非相对”路径的模块解析,typeRoots
可用于让 TypeScript 加载文件,但根本不影响导入路径和文件之间的关系。
最简单的解决方案是将 Foo.d.ts
文件放在与 Foo.js
相同的目录中。如果您想将类型保存在单独的目录中,则可以将 "rootDirs": ["js", "typings"]
添加到 tsconfig.json
。这种变化足以使您的示例对我有用,尽管我发现拥有相应的 Foo.js
和 Foo/index.d.ts
文件会令人困惑,并会鼓励您在使用子目录时保持一致,即在 JavaScript 端切换到 Foo/index.js
或在 TypeScript 端切换到 Foo.d.ts
。
关于javascript - 本地 JS 文件的 Typescript 声明文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53074172/