这是一个例子。所有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
包,但这是一个很好的例子。
答案 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