为导出工厂函数的库创建TypeScript类型定义

为导出工厂函数的库创建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 => { 
}); 

打字稿会知道它的类型。

+0

然而transpiled当这个结果JS像 Factory.default(configObject) 会抛出 默认是不是一个函数 –

+0

你'factory.js',不'factory.d.ts',必须有默认出口。我所提供的,只是从'lib'中简单重写'import {default,默认为Factory,Lib as Lib};'如果这条线有效,我的答案也会起作用。 –