我一直在尝试键入一个属性,该属性将在子类中定义为对象字面量,该对象必须只包含泛型类型中存在的键。
作为示例,我有以下基本结构
interface UserType {
name: string;
}
class Model<T> {
protected casts: object
}
class User extends Model<UserType> {
}我试图确保模型的protected casts属性可能只包含泛型类中存在的键,在这种情况下,应该只允许name作为casts属性的键。
我首先想到的是可以使用keyof来完成
protected casts: {[k: keyof T]: string}但是typescript正确地告诉我,k只能有一种类型的string或number。
有没有办法可以实现我想要的结果?
发布于 2018-02-17 02:40:31
当然,您可以使用the TypeScript standard library中的Record<K,V>类型。它是一个mapped type,表示一个对象,该对象的键是K,值是V
class Model<T> {
protected casts: Record<keyof T, object>
}您可以验证在User中,this.casts具有类型为object的name属性。
希望这能有所帮助;祝你好运!
https://stackoverflow.com/questions/48832553
复制相似问题