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