gpt4 book ai didi

typescript - 基于构造函数可选参数的方法返回的类型

转载 作者:行者123 更新时间:2023-12-04 03:58:42 25 4
gpt4 key购买 nike

我有一个带有构造函数的类:

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>

最佳答案

  1. 从类型参数 S 中删除 extends 约束
  2. 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>

Playground Link

关于typescript - 基于构造函数可选参数的方法返回的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63436720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com