[英]Validate if JSON matches type
如果 JSON,我会在表格上的 angular 应用程序中获取一些序列化信息。 我想检查事件属性名称是否是我的预定义字符串之一。
事件名称类型:
EventName =
'appInfo' |
'connectivity' |
'location' |
'pushNotification' |
'newVersion';
const foo: EventName = 'appInfo';
const bar: EventName = 'appInfos'; // error
const baz: EventName = JSON.parse('appInfos'); // no error
// validation
const nameValid = [
'appInfo',
'connectivity',
'location',
'pushNotification',
'newVersion'
].includes(baz) // works, but I would need to change things here and in type if something changes
如果您只想在一个地方维护您的字符串,您可以将它们as const
放入一个数组中,然后从该数组派生一个typeof
。
const EVENT_NAMES = [
'appInfo',
'connectivity',
'location',
'pushNotification',
'newVersion',
] as const;
type EventName = typeof EVENT_NAMES[number];
const foo: EventName = 'appInfo';
const bar: EventName = 'appInfos'; // error
const baz: EventName = JSON.parse('appInfos'); // no error
EVENT_NAMES.includes(baz);
EventName
类型将是:
const EVENT_NAMES: readonly ["appInfo", "connectivity", "location", "pushNotification", "newVersion"]
根据@bherbruck 的回答,我将 EventName 从 type 更改为 enum。 所以我的枚举看起来像
enum EventName {
AppInfo = 'appInfo',
Connectivity = 'connectivity',
Location = 'location',
PushNotification = 'pushNotification',
NewVersion = 'newVersion'
}
验证是
... && Object.values(EventName).includes(this.name);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.