Reactjs 用于非类型化npm模块的TypeScript自定义声明文件

Reactjs 用于非类型化npm模块的TypeScript自定义声明文件,reactjs,typescript,ecmascript-6,visual-studio-code,typescript2.0,Reactjs,Typescript,Ecmascript 6,Visual Studio Code,Typescript2.0,我在使用TypeScript的项目中使用一个从npm调用的React组件。那个库没有类型脚本声明,所以我想我应该写一个。声明文件如下所示(可能不完整,但不要太担心): [ts]找不到模块'shiitake'的声明文件d:/dev/foo/foobar.foo.Client.Web/node\u modules/shiitake/dist/index.js'隐式具有“any”类型 为这种类型的模块获取声明文件的标准方法是通过,而且效果很好。然而,我无法进行定制打字工作。有什么想法吗?声明声明模块'

我在使用TypeScript的项目中使用一个从npm调用的React组件。那个库没有类型脚本声明,所以我想我应该写一个。声明文件如下所示(可能不完整,但不要太担心):

[ts]找不到模块'shiitake'的声明文件d:/dev/foo/foobar.foo.Client.Web/node\u modules/shiitake/dist/index.js'隐式具有“any”类型


为这种类型的模块获取声明文件的标准方法是通过,而且效果很好。然而,我无法进行定制打字工作。有什么想法吗?

声明
声明模块'shiitake'应在全局范围内。i、 e.非模块中的顶级声明(其中模块是至少包含一个顶级
导入
导出
的文件)

模块中
declare module'.'{}
形式的声明是一种扩充。有关更多详细信息,请参阅

因此,您希望此文件如下所示:

declare module 'shiitake' {

    import * as React from 'react';

    export interface ShiitakeProps {
        lines: number;
    }

    export default class Shiitake extends React.Component<ShiitakeProps, any> { 
    }
}
声明模块'shiitake'{
从“React”导入*作为React;
导出接口ShiitakeProps{
行数:行数;
}
导出默认类Shiitake扩展React.Component{
}
}

我今天也有同样的问题

结果是我在模块声明之外粘贴了导出的接口。 我用作模板的typings文件在文件末尾有私有接口

因此,我导出的接口是在模块声明之外声明的。 这是typescript编译器的核心


一旦我将接口移动到模块边界中,一切都得到了修复。

根据我的经验,如果定义文件在模块定义之外声明了任何导出或导入,则定义文件将以这种方式失败。如果您使用具有自动导入功能的IDE,请注意

这帮了大忙,谢谢。对我来说,问题在于
import
语句在模块外部而不是内部。我希望我能将其向上投票十次。昨天我花了几个小时在这上面。我真希望TypeScript文档在这方面做得更好。这是一个愚蠢的问题,而且给出的警告非常不清楚。VSCode把这篇文章给搞砸了。@dudewad检查一下那篇文章上的用户名,它看起来像是大多数的自我剽窃(这里禁止吗?)谢谢!我的导入在模块声明之外。
/// <reference path="../../../../typings/shiitake.d.ts" />
import * as React from 'react';
import Shiitake from 'shiitake';
declare module 'shiitake' {

    import * as React from 'react';

    export interface ShiitakeProps {
        lines: number;
    }

    export default class Shiitake extends React.Component<ShiitakeProps, any> { 
    }
}