簡體   English   中英

如何在 TypeScript 中使用可選鍵創建索引 object?

[英]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 有密鑰mediumsea ,它是無效的,因為,同樣,所有密鑰都必須是Sizes類型.

我玩過Partial但無濟於事。

我怎樣才能做到這一點? 謝謝你。

你應該讓你的索引簽名保持不變。 索引簽名說明了屬性/值的形狀,如果它們是可枚舉的(或實際分配的)。 因此,您應該始終將索引簽名設為非未定義。 如果你想要嚴格的索引簽名訪問,你需要處理不在 object 中的鍵,那么你應該啟用noUncheckedIndexedAccess配置屬性,因為它會強制你在使用索引簽名時處理undefined的情況。 請參閱noUncheckedIndexedAccess上的參考資料

這很簡單。 您可以同時使用兩種Utility TypesPartialRecord

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.

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