我正在尝试为库创建类型定义文件。这个库很久以前就被运到了客户端,因此我无法更改其代码。
我使用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
我错过了什么?在这种情况下,是否有更好的方法来创建和使用类型定义?
答案 0 :(得分:1)
你是对的,在这种情况下你应该导入两件。但是这种语法也适用于你:
import Factory, { Lib } from 'lib';
Factory(configObject).then((actualLib: Lib=> {
});
此外,如果工厂有正确的定义,您可以省略指定actualLib
的类型:
import Factory from 'lib';
Factory(configObject).then((actualLib => {
});
Typescript会知道它的类型。