Typescript只允许来自另一个对象的键

时间:2018-02-16 18:06:10

标签: typescript

我一直在尝试键入一个将在子类中定义为对象文字的属性,该对象只能包含泛型类型中存在的键。

作为一个例子,我有以下基础结构

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只能有stringnumber的类型。

有没有办法可以实现我想要的结果?

1 个答案:

答案 0 :(得分:4)

当然,您可以使用the TypeScript standard library中的Record<K,V>类型。它是一个mapped type,表示一个对象,其键为K,其值为V

class Model<T> {
    protected casts: Record<keyof T, object>
}

您可以验证Userthis.casts内部name属性为object

希望有所帮助;祝你好运!