我一直在尝试键入一个将在子类中定义为对象文字的属性,该对象必须只包含存在于泛型类型中的键。
例如,我有以下基本结构
interface UserType {
name: string;
}
class Model<T> {
protected casts: object
}
class User extends Model<UserType> {
}
Run Code Online (Sandbox Code Playgroud)
我试图确保protected casts模型的属性可能只包含泛型类中存在的键,在这种情况下,只name应允许作为casts属性的键。
我首先认为我可以使用 keyof
protected casts: {[k: keyof T]: string}
Run Code Online (Sandbox Code Playgroud)
然而,打字稿正确地告诉我,k只能有一个stringor类型number。
有没有办法可以达到我想要的结果?
当然,您可以使用TypeScript 标准库中的Record<K,V>类型。它是一个映射类型,它表示一个对象,其键和值是:KV
class Model<T> {
protected casts: Record<keyof T, object>
}
Run Code Online (Sandbox Code Playgroud)
您可以验证这里面User,this.casts有一个name类型的属性object。
希望有所帮助;祝你好运!
| 归档时间: |
|
| 查看次数: |
1546 次 |
| 最近记录: |