我正在嘗試在 TypeScript 中驗證一個物件是否包含給定的鍵(來自SingleShopColumnsor MultishopColumns)并且具有一個validations字串陣列。
使用 Record 和泛型,但以通用方式表示此形狀的任何簡單方法都是有效的答案。
export type SingleShopColumns =
| 'SKU'
| 'Priority';
export type MultishopColumns =
| 'Redundant Date'
| 'Priority';
export type ValidatorSchema<T> = Record<keyof T, { validations: string[] }>;
export const SINGLE_SHOP_SCHEMA: ValidatorSchema<SingleShopColumns> = {
'SKU': {
validations: ['validateString']
},
'Priority': {
validations: ['validateString']
},
'Does_not_exist_should be error': {
validations: ['validateString']
}
};
export const MULTISHOP_SCHEMA: ValidatorSchema<MultishopColumns> = {
'Redundant Date': {
validations: ['validateString']
},
'Priority': {
validations: ['validateString']
},
};
帶有此代碼的 TypeScript 游樂場
收到錯誤
Type '{ SKU: { validations: string[]; }; Priority: { validations: string[]; }; 'Does_not_exist_should be error': { validations: string[]; }; }' is not assignable to type 'ValidatorSchema<SingleShopColumns>'. Object literal may only specify known properties, and ''SKU'' does not exist in type 'ValidatorSchema<SingleShopColumns>'.
uj5u.com熱心網友回復:
T已經是一把鑰匙了。洗掉keyof并添加約束:
export type ValidatorSchema<T extends string> = Record<T, { validations: string[] }>;
uj5u.com熱心網友回復:
你T是一個鍵的聯合,因此只是
export type ValidatorSchema<T extends string|number|symbol> =
Record<T, { validations: string[] }>;
而不是
export type ValidatorSchema<T> =
Record<keyof T, { validations: string[] }>;
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/516369.html
標籤:打字稿仿制药
上一篇:如何使用打字稿泛型型別作為物件鍵
