gpt4 book ai didi

typescript - `` 形式的通用约束,其中 `E` 是 `enum` ?

转载 作者:行者123 更新时间:2023-12-04 08:49:09 25 4
gpt4 key购买 nike

像这样的东西是什么意思:

function f<T extends E>(obj: T) {}
哪里 E是一些 enum喜欢,说
enum E {
X
}
enum s 实际上无法扩展,不能删除此约束并将函数重写为:
function f(obj: E) {}
PS: this是有问题的代码。

最佳答案

如果您不需要 T 的类型在您的功能中,那么您是对的,不需要是通用的。
但是,在您链接的文件中,该类型在类中使用。
这是相关的部分,其他内容已删除:

abstract class ComputedEditorOption<K1 extends EditorOption, V> implements IEditorOption<K1, V> {

public readonly id: K1;

constructor(id: K1, deps: EditorOption[] | null = null) {
this.id = id;
//...
}
}
这表示 id类型 EditorOption传递给构造函数。这保存在泛型类类型 K1 中.稍后当您访问 id 时属性,它将返回传递给构造函数的相同枚举选项。这需要泛型来捕获枚举的子类型(该枚举的特定值),并在该函数的返回值或类的实例中使用它。

用你自己的例子来澄清:
function f1(arg: MyEnum): { id: MyEnum } {
return { id: arg }
}

const a1 = f1(MyEnum.A) // Type: MyEnum
const b1 = f1(MyEnum.B) // Type: MyEnum
当您将参数键入为 MyEnum 时在这里,您不能使用返回类型中提供的枚举,因此您能做的最好的事情是将返回值键入为 MyEnum ,因为您无法知道提供了该枚举的哪个值。
但是当你使用泛型时:
function f2<T extends MyEnum>(arg: T): { id: T } {
return { id: arg }
}

const a2 = f2(MyEnum.A) // Type: MyEnum.A
const b2 = f2(MyEnum.B) // Type: MyEnum.B
现在您可以在返回类型中使用完全提供的参数类型。
这或多或少是您链接的代码正在做什么。
Playground

关于typescript - `<T extends E>` 形式的通用约束,其中 `E` 是 `enum` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64164016/

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