【发布时间】:2019-07-09 13:42:56
【问题描述】:
我有这个界面
interface SUser {
ID: number;
NAME: string;
MAIL: string;
PASSWORD: string;
GENDER: number;
BIRTHDATE: string;
ID_FB: string;
CREDIT: number;
ID_REFERRAL: number;
}
我想要一个类型来描述一个对象并确保我的对象与我的一个接口属性的键和值匹配。
我尝试了以下方法:
type fieldType = { [K in SUser]: string | number };
我将一个字段对象设置为只允许来自SUser 的键,但如果我将值设置为字符串,例如键是ID,我想得到一个错误。
基本上我想根据我的界面强制执行一个键值对。
使用前面的代码,我收到以下错误,并且不强制执行值类型:
Type 'SUser' is not assignable to type 'string | number | symbol'.
Type 'SUser' is not assignable to type 'symbol'.
对这个主题有任何帮助吗?
【问题讨论】:
-
不确定你在问什么。您希望如何使用
fieldType?此外,类型应为TitleCase以保持一致性 -
字段对象是否应该恰好有一个来自
SUser的键/值对?它应该有至少一个来自SUser的键/值对吗?展示您希望成功的对象示例(例如,const good: fieldType = {...};)和您希望失败的对象示例(例如,const bad: fieldType = {...} // error!)对您来说非常有用。 -
穆拉特成功回答了我的问题!还要感谢 Juan 的类型命名信息 :)
-
type fieldType = Partial<SUser>将允许来自SUser的任意数量的属性。这意味着const x: fieldType = {}(零属性)和const y: fieldType = {ID: 1, NAME: "x"}(两个属性)都将编译。这真的是你想要的吗?
标签: typescript