在Typescript中导入私有接口

时间:2016-12-02 09:44:49

标签: typescript phpstorm webstorm jetbrains-ide

这是一个例子。所有localforage包导出都是私有LocalForage类的实例。相应的键入具有相同名称的接口,但也不会导出。

尽管LocalForage接口没有导出,但TypeScript和IDE(WebStorm)似乎允许从'@ types / localforage'导入它。但该类型未被应用。

此代码在customForage.setDriver(...)行之前没有linting问题且没有导入错误:

import * as localForage from 'localforage';
import { LocalForage } from '@types/localforage';

var customForage: LocalForage = localForage;
customForage.setDriver('custom');

但导致错误:

  

未解析的函数或方法setDriver()

虽然这段代码

import * as localForage from 'localforage';

/// <reference path="../../../node_modules/@types/localforage/index.d.ts"/>

var customForage: LocalForage = localForage;
customForage.setDriver('custom');

成功识别setDriver方法。

@types终于到来时,我很高兴,维护index.d.ts的相对路径很麻烦。

在使用该接口的文件中是否可以在没有<reference path="../../... />的情况下处理这种情况?

问题不仅限于特定的localforage包,但这是一个很好的例子。

1 个答案:

答案 0 :(得分:1)

根据我的阅读和@types的日常工作,您永远不需要导入或引用@types。 @types会按名称自动解析。因此,对于模块localforage,将加载@types localforage。 这里提供了一个简短的摘要:https://blogs.msdn.microsoft.com/typescript/2016/06/15/the-future-of-declaration-files/

我想使用webstorm或phpstrom时的问题可能是,你没有使用打字稿版本而不是你为项目安装的版本。尝试使用自定义打字稿版本并加载已安装在node_modules中的版本。并确保使用TypeScript 2.0