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

时间:2017-04-15 07:35:52

标签: typescript typescript-typings

我正在尝试为库创建类型定义文件。这个库很久以前就被运到了客户端,因此我无法更改其代码。

我使用TypeScript 2。*

库包导出单个工厂函数(使用默认导出);用户可以使用该工厂函数创建lib的实例。 我用于lib.d.ts的是

import LibFactory from 'lib';

LibFactory(configObject).then((actualLib: Lib => {
    // do some magic here
});

然后我尝试在TypeScript中使用它,如:

import * as Lib from 'lib';

Lib.default(configObject).then((actualLib: Lib.Lib => {
});

但它失败了,因为没有定义Lib类型(realLib的类型)。

我可以通过两种方式使其发挥作用,但我不确定这些是否是正确的解决方案:

1)从Lib

导入所有内容
import {default as Factory, Lib as Lib} from 'lib';

Factory(configObject).then((actualLib: Lib=> {
});

2)将默认值导入为某个名称,并将lib中的任何其他类型导入为名为import

SELECT
    t1.q_id,
    CASE WHEN COUNT(t2.sub_ans_id) = COUNT(*)
         THEN 1
         ELSE 0 END AS is_correct
FROM Question_Answers t1
LEFT JOIN User_Submited_Answers t2
    ON t1.q_id   = t2.q_id AND
       t1.ans_id = t2.sub_ans_id
GROUP BY t1.q_id

我错过了什么?在这种情况下,是否有更好的方法来创建和使用类型定义?

1 个答案:

答案 0 :(得分:1)

你是对的,在这种情况下你应该导入两件。但是这种语法也适用于你:

import Factory, { Lib } from 'lib';

Factory(configObject).then((actualLib: Lib=> {
});

此外,如果工厂有正确的定义,您可以省略指定actualLib的类型:

import Factory from 'lib';

Factory(configObject).then((actualLib => {
});

Typescript会知道它的类型。