不知道你想问的是什么,是问Typescript中表达一个类的写法有没有多种吗
因为从本质上来说,虽然可以使用不同的语法去定义同一种类型,但是不同的语法所表达的含义也是不同的。
比如你举例的函数类型声明,虽然在你的例子中看似是等价的,但是看看下面这种情况呢?
// 函数声明
function sum1(x: number, y: number): void {
return x + y;
}
// 函数表达式
let sum2: (x: number, y: number) => void = function (x, y) {
return x + y;
};
注意函数的返回类型从number
修改为了void
。应该能注意到,在这个例子中,sum1
的返回值将会报告错误。
对于sum1
而言,申明了这个函数的完整类型,所以不管是参数还是返回值都将被类型约束。只要有不符合的类型就会报错;
对于sum2
而言,并未申明匿名函数的类型,而是申明了sum2
这个变量的类型。当匿名函数被赋值到sum2
时,进行类型推导,只要类型没有不兼容的部分(注意不是约束),那么就不会报错。
所以,如果是问完全与类申明等同的,那肯定没有。
如果你只是问,有没有其他类的申明方式,那么是有的。比如
interface Clazz2 {
save(arg);
}
interface Clazz2Constructor {
new (arg): Clazz2;
read(arg);
}
type StaticRead = Clazz2Constructor["read"];
type Clazz2Instance = InstanceType<Clazz2Constructor>; // Clazz2
type save = Clazz2Instance["save"];
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…