Typescript 从函数工厂和类推断成员的类型脚本
使用类,我可以直接访问成员,而无需typescript typechecker投诉,但当我使用typeof时,使用工厂函数,它表示该属性不存在Typescript 从函数工厂和类推断成员的类型脚本,typescript,Typescript,使用类,我可以直接访问成员,而无需typescript typechecker投诉,但当我使用typeof时,使用工厂函数,它表示该属性不存在 function serviceFunc() { function add(){ //logic... } return { add } } class ServiceClazz{ private val; constructor() { this.val = 0; } add(){
function serviceFunc() {
function add(){
//logic...
}
return {
add
}
}
class ServiceClazz{
private val;
constructor() {
this.val = 0;
}
add(){
console.log(this.val);
}
}
const func1: typeof serviceFunc = serviceFunc();
//property add does not exist...
serviceFunc.add();
//doesn't complain about add...
const func2: ServiceClazz = new ServiceClazz();
func2.add();
这是否意味着我必须使用接口定义serviceFunc才能获得打字?在这种情况下,类似乎受益匪浅,还是我遗漏了什么?这只是一个打字错误吗?无法写入
const func1:typeof serviceFunc=serviceFunc()
,原因与无法写入const func2:typeof ServiceClazz=new ServiceClazz()
相同;构造函数不是它构造的对象,函数也不是它返回的值。类似地,您不能调用serviceFunc.add()
,原因与您不能调用ServiceClazz.add()的原因相同。相反,如果你写
const func1 = serviceFunc();
func1.add();
它会起作用的。如果确实要为func1
提供类型注释,可以使用以下命令:
const func1: ReturnType<typeof serviceFunc> = serviceFunc();
有意思,我来试试。谢谢。我明白了,所以如果我将serviceFunc()返回值传递给另一个函数,我会使用ReturnType。那是为了我。非常感谢。我仍然需要浏览typescript站点的参考部分。谢谢你的澄清。干杯
/* const func1: {
add: () => void;
} */