tsc没有找到本地模块声明,但Webstorm确实如此

时间:2017-04-09 13:02:09

标签: typescript typescript-typings typescript2.0

我正在为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(试图让它工作我已经将maintypings属性放在那里,没有或任何一个也不起作用):

{
    "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 removenpm un -i,然后手动删除tsc及其/AppData/Local/Yarn/config/global/node/global/和NPM模块中保留的.bin/个文件和文件夹文件夹中。

要重新安装,我使用了yarn global add typescriptyarn 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'修饰符不能应用于环境模块和模块扩充,因为它们始终可见"从我从其他地方推测出来的情况来看,我的模块声明已经是环境声明了。

1 个答案:

答案 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.