[英]How can I create an indexed object with optional keys in TypeScript?
我有以下類型 - export type Sizes = 'small' | 'medium' | 'big'
export type Sizes = 'small' | 'medium' | 'big'
export type Sizes = 'small' | 'medium' | 'big'
,我想將此類型用作我正在創建的 object 的鍵:
type SizeInformation = {
[key in Sizes]: string;
}
然而,這里所需的功能是這種類型(以及因此將基於它創建的 object)不一定需要命名所有鍵,或者根本不需要,但如果鍵進入 object,它應該類型為Sizes
。
因此,一個空的 object 是有效的,一個只有密鑰medium
的 object 也是有效的,但是如果一個 object 有密鑰medium
和sea
,它是無效的,因為,同樣,所有密鑰都必須是Sizes
類型.
我玩過Partial
但無濟於事。
我怎樣才能做到這一點? 謝謝你。
你應該讓你的索引簽名保持不變。 索引簽名說明了屬性/值的形狀,如果它們是可枚舉的(或實際分配的)。 因此,您應該始終將索引簽名設為非未定義。 如果你想要嚴格的索引簽名訪問,你需要處理不在 object 中的鍵,那么你應該啟用noUncheckedIndexedAccess
配置屬性,因為它會強制你在使用索引簽名時處理undefined
的情況。 請參閱noUncheckedIndexedAccess
上的參考資料
這很簡單。 您可以同時使用兩種Utility Types
, Partial
和Record
。
type Sizes = 'small' | 'medium' | 'big'
// Following code will create type that can accept keys which are of type Sizes and which will be optional
type SizeInformation = Partial<Record<Sizes, string>>;
const obj : SizeInformation = {
big: 'big',
medium: 'medium',
small:'small'
}
供參考https://www.typescriptlang.org/docs/handbook/utility-types.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.