首页 > 解决方案 > 在打字稿中指定 keyof 类型

问题描述

有没有办法指定已经在类型中定义的键?

interface KeyType {
 userName: string,
 address: string
}

type ValidationType = {
 userName: ValidateUserNameType;
 address: ValidateAddressType;
}

那些KeyTypeandValidationType被用于不同的事情,但ValidationTypekey 总是与KeyType.

我一直在环顾四周,但我没有运气

标签: javascripttypescript

解决方案


我在这里的提议是创建第三种类型,它将以您想要的方式加入这两种类型。考虑:


interface KeyType {
    userName: string,
    address: string
}
type ValidationRules = {
    userName: ValidateUserNameType;
    address: ValidateAddressType;
    other: ValidateUserNameType; // this field will not be in ValidationType
}
// Validation type below is not affected by any additional key in ValidationRules
// keys are applied only if are added in KeyType and in ValidationRules
type ValidationType = {
    [K in keyof KeyType]: ValidationRules[K]
}

之后,我们的类型ValidationType将始终具有:

  • 钥匙来自KeyType
  • ValidationType如果key in没有规则,将会出错KeyType
  • 将跳过任何其他键ValidationRules

换句话说ValidationType,完全由两种类型驱动,并且只有键存在于两者中,任何不存在于两者中的键都将被跳过或编译错误。


推荐阅读