为导出工厂函数的库创建TypeScript类型定义
问题描述:
我正在尝试为库创建类型定义文件。该库很早以前就已发布给客户,所以我无法更改其代码。为导出工厂函数的库创建TypeScript类型定义
我使用打字稿2 *
库包导出(使用默认的导出)一个工厂函数;用户可以使用该工厂函数创建库的实例。 我使用lib.d.ts是
declare var _createLib: (config: Object) => Promise<Lib>;
export default _createLib;
export interface Lib {
version: string;
}
然后我试图使用它在打字稿,如:
import LibFactory from 'lib';
LibFactory(configObject).then((actualLib: Lib => {
// do some magic here
});
但失败了,因为库类型(即actualLib的) 没有定义。
有两种方法,我可以让它工作,但我不知道这些是妥善的解决办法:
1)从库
import * as Lib from 'lib';
Lib.default(configObject).then((actualLib: Lib.Lib => {
});
2)导入默认一些导入所有名称和任何其他类型的名称导入
import {default as Factory, Lib as Lib} from 'lib';
Factory(configObject).then((actualLib: Lib=> {
});
我错过了什么?在这种情况下是否有更好的方式来创建和使用类型定义?
答
你是对的,在这种情况下,你应该导入这两个部分。但是,这句法应该工作以及为您提供:
import Factory, { Lib } from 'lib';
Factory(configObject).then((actualLib: Lib=> {
});
而且,如果工厂有正确的定义,你可以省略指定actualLib
的类型:
import Factory from 'lib';
Factory(configObject).then((actualLib => {
});
打字稿会知道它的类型。
然而transpiled当这个结果JS像 Factory.default(configObject) 会抛出 默认是不是一个函数 –
你'factory.js',不'factory.d.ts',必须有默认出口。我所提供的,只是从'lib'中简单重写'import {default,默认为Factory,Lib as Lib};'如果这条线有效,我的答案也会起作用。 –