在 Typescript 泛型中的什么位置
Where in Typescript Generics
我有一个函数,它接受一个对象和一个 class 的名称(包含在该对象中)。获取一个对象的所有属性并不难(keyof O
),并且确定一个键是否是 class 也不难(O[N] extends {new: (..args: any[]) => any}
)。但是,我无法将它们组合起来:
function foo<O, N extends keyof O where O[N] extends {new: (...args: any[]) => any}> (obj: O, name: N){}
我看过 Extract<T, U>
,但我不能在 U
的检查中使用 T
。我还能怎么做?
没有这样的语法,您可以向 O
添加约束,而不是强制 N
键具有您需要的任何类型:
function foo<O extends Record<N, new (...a: any) => any>, N extends keyof O> (obj: O, name: N){
}
let o = {
a: class {},
b: class {},
c: 0,
}
foo(o, "a") // ok
foo(o, "c") // error
我有一个函数,它接受一个对象和一个 class 的名称(包含在该对象中)。获取一个对象的所有属性并不难(keyof O
),并且确定一个键是否是 class 也不难(O[N] extends {new: (..args: any[]) => any}
)。但是,我无法将它们组合起来:
function foo<O, N extends keyof O where O[N] extends {new: (...args: any[]) => any}> (obj: O, name: N){}
我看过 Extract<T, U>
,但我不能在 U
的检查中使用 T
。我还能怎么做?
没有这样的语法,您可以向 O
添加约束,而不是强制 N
键具有您需要的任何类型:
function foo<O extends Record<N, new (...a: any) => any>, N extends keyof O> (obj: O, name: N){
}
let o = {
a: class {},
b: class {},
c: 0,
}
foo(o, "a") // ok
foo(o, "c") // error