typescript 类的类型脚本键,

olmpazwi  于 2022-11-26  发布在  TypeScript
关注(0)|答案(2)|浏览(100)

我想把一个类传递给一个函数,并推断出该类的键,但它不起作用:

class Foo {
  bar: string;
}

function foo<C>(comp: C, key: keyof C) {

}

foo(Foo, '') // expecting to get bar here, but I'm getting the prototype key

当我把它作为一个类型使用时,它起作用:

type Keys = keyof Foo;

有什么问题?

mzmfm0qo

mzmfm0qo1#

首先,您需要为bar属性提供初始值设定项。其次,您正在传递类构造函数作为参数,并期望第二个为bar。只有当您提供Foo类的示例时,它才能为bar。如果您要获取bar,则需要使用InstanceType实用程序类型,换句话说,从类示例而不是类构造函数获取键:

class Foo {
  bar: string = ''
}
type AnyClass = new (...args: any[]) => any

function foo<C extends AnyClass>(comp: C, key: keyof InstanceType<C>) {

}

foo(Foo, 'bar') // ok
nr9pn0ug

nr9pn0ug2#

您已

var Foo = class Foo { ... }
foo(/* new () => Foo */ Foo, /* 'prototype' */ ...)

因为Foo是一个类(即函数),而不是Foo类的示例

相关问题