作者:-崔思聪 | 来源:互联网 | 2024-09-28 17:06
我有如下一个类:
1 2 3 4 5 6 7 8 9 10 11 12
| class Test {
value: number | number[];
constructor(value: number | number[]) {
this.value = value;
}
get computedValue() {
if (typeof this.value === 'number') return this.value * 2;
if (Array.isArray(this.value)) return this.value.map(i => i * 2);
}
} |
计算属性
的类型是由实例对象时传入参数决定的.
1 2 3 4
| const test = new Test(1)
const value:number = test.computedValue
// 报错->'number[]' is not assignable to type 'number'. |
这种应该是用泛型吧.但我对泛型不熟,再一个取值函数似乎无法声明类型.
我尝试了声明一个interface,然后类再实现这个interface的方式也不行.
进阶:
如果
接受一个配置对象,value是其中的一个属性,那又要如何声明呢?
望大佬们不啬赐教~~
update
查阅文档后更改如下,但依然报错
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| type TestProps = number | number[]
class Test {
constructor(value: T) {
this.value = value;
}
value: T;
get computedValue(): T {
if (typeof this.value === 'number') {
return this.value * 2;
// error->Type 'number' is not assignable to type 'T'.
}
if (Array.isArray(this.value)) {
return this.value.map(i => i * 2);
// error->Type 'number[]' is not assignable to type 'T'.
}
}
}
const test = new Test(1);
const test2 = new Test([1, 2]);
const num1: number = test.computedValue;
const num2: number[] = test2.computedValue; |