我一直在尝试键入一个将在子类中定义为对象文字的属性,该对象只能包含泛型类型中存在的键。
作为一个例子,我有以下基础结构
interface UserType {
name: string;
}
class Model<T> {
protected casts: object
}
class User extends Model<UserType> {
}
我正在尝试确保模型的protected casts
属性可能只包含泛型类中存在的键,在这种情况下,只允许name
作为{casts
的键。 1}}属性。
我首先想到我可以使用keyof
protected casts: {[k: keyof T]: string}
然而,打字稿正确告诉我k
只能有string
或number
的类型。
有没有办法可以实现我想要的结果?
答案 0 :(得分:4)
当然,您可以使用the TypeScript standard library中的Record<K,V>
类型。它是一个mapped type,表示一个对象,其键为K
,其值为V
:
class Model<T> {
protected casts: Record<keyof T, object>
}
您可以验证User
内this.casts
内部name
属性为object
。
希望有所帮助;祝你好运!