javascript - 在打字稿中指定 keyof 类型
问题描述
有没有办法指定已经在类型中定义的键?
interface KeyType {
userName: string,
address: string
}
type ValidationType = {
userName: ValidateUserNameType;
address: ValidateAddressType;
}
那些KeyType
andValidationType
被用于不同的事情,但ValidationType
key 总是与KeyType
.
我一直在环顾四周,但我没有运气
解决方案
我在这里的提议是创建第三种类型,它将以您想要的方式加入这两种类型。考虑:
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
,完全由两种类型驱动,并且只有键存在于两者中,任何不存在于两者中的键都将被跳过或编译错误。
推荐阅读
- python - ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 13 is different from 1)
- libcurl - 如何使用 libcurl 获取 ftp 服务器上的文件大小?
- r - 尝试使用 R 进行异常检测时遇到错误
- mysql - Mysql - 在一个范围内的子集查询的总和
- java - Recyclerview 没有更新数据集,仍然显示旧值
- postgresql - 使 postgreSQL/SQL Alchemy orm 选择更快
- c# - Assemblie.load.getType 不适用于类型?
- machine-learning - 为什么precision_recall_fscore_support 返回2 个值?
- android - java.lang.IllegalArgumentException:没有为片段 DiscDispFragment 找到 id 0x184f(未知)的视图
- algorithm - 从 4 位整数流中查找中值的空间使用下限。为什么它是“log n”位?