热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《用于非类型化npm模块的TypeScript自定义声明文件》经验,为你挑选了1个好方法。

我正在使用一个名为shiitake的React组件从npm进入我使用TypeScript的项目.该库没有TypeScript声明,所以我想我会写一个.声明文件如下所示(可能不完整,但不要太担心):

import * as React from 'react';

declare module 'shiitake' {

    export interface ShiitakeProps {
        lines: number;
    }

    export default class Shiitake extends React.Component { 
    }
}

我把这个内部./typings/shiitake.d.ts文件和VS代码,我看到以下错误:

[ts]增强中的模块名称无效.模块'shiitake'解析为'd:/dev/foo/foobar.foo.Client.Web/node_modules/shiitake/dist/index.js'中的无类型模块,该模块无法扩充.

在消费方面,即使使用上述声明(因为我noImplicitAny打开了编译器开关),我仍然会得到相同的错误:

/// 
import * as React from 'react';
import Shiitake from 'shiitake';

[ts]找不到模块'shiitake'的声明文件.'d:/dev/foo/foobar.foo.Client.Web/node_modules/shiitake/dist/index.js'含有'any'类型.

获取此类模块的声明文件的标准原因是通过@types/方式,并且运行良好.但是,我不能让自定义打字工作.有什么想法吗?



1> mohamed hega..:

声明declare module 'shiitake';应该在全球范围内.即非模块中的顶级声明(其中模块是具有至少一个顶级的文件importexport).

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

所以你希望这个文件看起来像:

declare module 'shiitake' {

    import * as React from 'react';

    export interface ShiitakeProps {
        lines: number;
    }

    export default class Shiitake extends React.Component { 
    }
}


这是很多帮助,谢谢.对我来说,问题是`import`语句在模块之外而不是在内部.
我希望我可以投票十次。我昨天花了几个小时。我真的希望TypeScript文档对此更好。
这样一个愚蠢的问题,以及给出的警告都还不清楚。VSCode为我搞砸了这个。
推荐阅读
author-avatar
加州旅馆在南京_380
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有