我正在为recase NPM package编写一个TypeScript定义文件,所以我跟随DefinitelyTyped contribution guidelines,其中一部分是运行(在我的情况下)
tsc --noImplicitAny recase/recase-tests.ts
这会产生错误:
recase/recase-tests.ts(1,22): error TS7016: Could not find a declaration file for module 'recase'. 'C:/dev/recase-typings/node_modules/recase/recase.js' implicitly has an 'any' type.
略微修剪,这是我的项目结构:
.
+-- recase
| +-- recase.d.ts
| +-- recase-tests.ts
+-- package.js
+-- tsconfig.json
除了说明,作者和类似字段之外,这是我的package.json
(试图让它工作我已经将main
和typings
属性放在那里,没有或任何一个也不起作用):
{
"name": "recase-typings",
"version": "1.0.0",
"devDependencies": {
"recase": "^1.0.4"
},
"typings": "recase",
"main": "recase"
}
这是我的tsconfig.json
:
{
"compilerOptions": {
"baseUrl": "recase"
}
}
这是recase/recase.d.ts
:
declare module 'recase' {
namespace recase {
function camelCopy(orig: any): any;
function snakeCopy(orig: any): any;
}
}
这是recase/recase-tests.ts
:
import {recase} from 'recase';
const snake = recase.snakeCopy(
{
FOO: 1, // Exception
abcXyz: { // Normal
_abcXyz: [ // private
{__abcXyz: 1} // very private
, {___abcXyz: 1} // very very private
],
},
},
);
const camel = recase.camelCopy(
{
foo: 1, // Exception
abc_xyz: { // Normal
_abc_xyz: [ // private
{__abc_xyz: 1} // very private
, {___abc_xyz: 1} // very very private
],
},
},
);
我在Windows 7上,只是删除了打字稿和打字的重新安装,因为之前的安装崩溃了。我首先使用yarn global remove
和npm un -i
,然后手动删除tsc
及其/AppData/Local/Yarn/config/global/node/global/
和NPM模块中保留的.bin/
个文件和文件夹文件夹中。
要重新安装,我使用了yarn global add typescript
和yarn global add typings
。使用yarn
安装TypeScript会产生一条说I"可能意味着安装TypeScript"并且使用npm install typescript -g
,并且从那时起tsc
命令was not found
,我按照推荐的命令进行了跟进。
我觉得很奇怪,WebStorm编译文件很好,TSLint没有错误,但tsc
没有找到声明文件。 如何让tsc
找到声明文件?
值得注意的是tsc
实际上产生的.js
文件具有与通过WebStorm编译时完全相同的内容。我能找到的最接近的问题讨论是this one,在这种情况下,根本原因并未将其声明为环境外部模块,而是将export
放在{{1}之前让TSLint给我" TS2668:' export'修饰符不能应用于环境模块和模块扩充,因为它们始终可见"从我从其他地方推测出来的情况来看,我的模块声明已经是环境声明了。
答案 0 :(得分:0)
The problem was with recase.d.ts
When written like this it works:
export function camelCopy(orig: any): any;
export function snakeCopy(orig: any): any;
I had failed to comprehend that the file itself is a module.