如何在没有TypeScript定义的情况下导入npm包,以便IDE仍提供智能感知?

时间:2016-08-25 09:17:47

标签: javascript typescript npm webstorm typescript-typings

我使用的是npm包,它没有TypeScript的类型定义。确切地说,我正在使用react-google-maps库。

按照他们的示例,我从包中导入了以下组件:

import {GoogleMapLoader, GoogleMap, Marker} from "react-google-maps";

但是,TypeScript在编译期间会抛出错误:

error TS2305: Module '"react-google-maps"' has no exported member 'GoogleMapLoader'.

所以,我对此的快速解决方案是模块的声明,其成员类型为“any”:

declare module "react-google-maps" {
    export var GoogleMapLoader:any;
}

现在,问题是我的IDE(WebStorm)不再提供intellisense了。 GoogleMapLoader甚至没有被认为是反应成分,我相信如果我使用巴别塔,我会认为它(至少是没有打字的方法和属性)。

如何导入没有类型定义的npm软件包,以便由TypeScript编译器解析,但是不妨碍IDE提供智能感知?

1 个答案:

答案 0 :(得分:1)

您需要声明您正在使用的内容,而不仅仅是使用any

例如:

declare module "react-google-maps" {
    interface GoogleMapLoaderProps {
        ....
    }

    interface GoogleMapLoaderState {
        ....
    }

    class GoogleMapLoader extends React.Component<GoogleMapLoaderProps, GoogleMapLoaderState> { }
}

您可以从正在使用的内容开始,需要IDE支持,并慢慢添加内容 您可以查看Writing Declaration Files以获取有关如何操作的详细信息。