Typescript 表单“”的通用约束<;T扩展E>;`其中'E'是'enum'?
这是什么意思 函数f(obj:T){code> 其中Typescript 表单“”的通用约束<;T扩展E>;`其中'E'是'enum'?,typescript,generics,enums,typescript-generics,Typescript,Generics,Enums,Typescript Generics,这是什么意思 函数f(obj:T){code> 其中E是一些enum类似的,比如 enum E{ X } 由于enums实际上无法扩展,是否可以删除此约束并将函数重写为: 函数f(obj:E){ PS:代码是否有问题。如果您的函数中不需要t类型,那么您是对的,is不需要是泛型的 但是,在链接的文件中,该类型在类中使用 以下是相关的部分,其他部分被删除: abstract class ComputedEditorOption<K1 extends EditorOption, V>
E
是一些enum
类似的,比如
enum E{
X
}
由于enum
s实际上无法扩展,是否可以删除此约束并将函数重写为:
函数f(obj:E){
PS:代码是否有问题。如果您的函数中不需要
t
类型,那么您是对的,is不需要是泛型的
但是,在链接的文件中,该类型在类中使用
以下是相关的部分,其他部分被删除:
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;
//...
}
}
在此处键入参数为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
函数f2(arg:T):{id:T}{
返回{id:arg}
}
const a2=f2(MyEnum.A)//类型:MyEnum.A
const b2=f2(MyEnum.B)//类型:MyEnum.B
现在,您可以在返回类型中使用提供的参数类型
这或多或少就是您链接的代码所做的
如果类型扩展了枚举,则表示该类型可以是:
- 枚举的一个特定值
- 枚举值的某些子集
- 枚举的所有可能值
enum E {
X,
Y,
Z
}
function f<T extends E>(val: T) {}
在任何情况下,E.X
都可分配给T
(即,E.X
等于或比T
窄),并且T扩展了E
(即,T
等于或比E
窄)
enum E {
X,
Y,
Z
}
function f<T extends E>(val: T) {}
f<E>(E.X);
f<E.X>(E.X);
f<E.X | E.Y>(E.X);
f<Exclude<E, E.Y>>(E.X);