我有一个构造函数的类:
class Example<T> {
constructor(private elem: T, private array?: T[]) {}
}
我想添加方法some
与返回:
Promise<T>
如果未array
在构造函数中定义参数Promise<T[]>
如果在构造函数中定义了参数array
我怎样才能做到这一点?
实际上我有:
class Example<T, S extends T[] | undefined> {
constructor(private elem: T, private array?: S) {}
some(): S extends undefined ? Promise<T> : Promise<S> {
if(!this.array) {
return Promise.resolve(this.elem);
}
return Promise.resolve(this.array);
}
}
const a = new Example(1, undefined);
a.some(); // ✓ Return Promise<number>
const b = new Example(1, [1, 2, 3]);
b.some(); // ✓ Return Promise<number[]>
const c = new Example(1);
c.some(); // ✗ Return Promise<number> | Promise<number[]>, should return Promise<number>
extends
从类型参数中删除约束S
S extends undefined ?
为S extends T[] ?
class Example<T, S> {
constructor(private elem: T, private array?: S) {}
some(): S extends T[] ? Promise<S> : Promise<T> {
if (!this.array) {
// @ts-ignore
return Promise.resolve(this.elem);
}
// @ts-ignore
return Promise.resolve(this.array);
}
}
const a = new Example(1, undefined);
a.some(); // ✓ Return Promise<number>
const b = new Example(1, [1, 2, 3]);
b.some(); // ✓ Return Promise<number[]>
const c = new Example(1);
c.some(); // ✓ Return Promise<number>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句