簡體   English   中英

驗證 JSON 是否匹配類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM