如果我具有以下类型和功能
interface Mapper {
mapper: (number) => number
}
function withNumberAdded(num: number) {
return class implements Mapper {
mapper = (n: number) => num + n
}
}
withNumberAdded
返回的确切类型是什么? Atom告诉我它的typeof Anonymous class
,但是如果我这样做了
const IMPL = withNumberAdded(88)
console.log(new IMPL().mapper(33))
编译。但是,如果我故意输入错字并写上new IMPL().mappr(33)
,则编译会失败并显示
类型“(匿名类)”上不存在属性“ mappr”。你是否 是“映射器”的意思?
因此,对于这种类型,打字稿似乎比(Anonymous class)
了解的更多:)
如果我想明确指定类型,该怎么做?
function withNumberAdded(num: number): Mapper
不起作用(因为我猜这是实例类型)。
那么我应该在最后:
之后放什么?
答案 0 :(得分:1)
您返回的类与接口不匹配,它仅与该类的 instance 匹配。
在JavaScript中,“类”具有两个方面,即静态方面(构造函数和静态方法/变量)和实例方面(非静态方法/变量)。
您可以为双方创建接口,在您的示例中,静态方接口仅具有构造函数,因为您没有任何静态变量或方法:
interface MapperConstructor {
new(): Mapper;
}
现在您可以使用此构造函数接口作为返回值:
function withNumberAdded(num: number): MapperConstructor {
// ..
}