簡體   English   中英

有沒有辦法在 object 的接口中使用字符串字面量類型?

[英]Is there a way to use the string literal type in an interface of object?

我有一個類型Color

type Color = 'yellow' | 'red' | 'orange'

我有一個 object 接口是ColorSetting

interface ColorSetting {
  id: string
  yellow?: boolean
  red?: boolean
  orange?: boolean
}

我想使用Color類型來簡化界面ColorSetting

我簡化的代碼如下:

interface ColorSetting {
  id: string
  [k in Color]?: boolean
}

但是我收到一個錯誤A computed property name in an interface must refer to an expression whose type is a literal type or a 'unique symbol' type.

我應該如何在接口中正確使用字符串文字類型?

在那里使用字符串文字很重要嗎? 帶有字符串值的枚舉是否不夠:

enum Colors {
  YELLOW = 'yellow',
  RED = 'red',
  ORANGE = 'orange',
}

interface ColorSetting {
  id: string;
  color: Colors;
}

這種方法的唯一缺點是如果您需要反轉 map 這個,typescript 不會自己做。

我自己傾向於不使用這樣的文字,所以我不確定這是否有效,但試一試:

interface ColorSetting {
  id: string;
  color: Color;
}

基本上只需使用您聲明的類型,刪除 '[k in Color]' 位

我找到了一個對我有用的解決方案。 此解決方案使用Intersection Types

ColorSetting = {
   id: string
 } & {
   [k in Color]?: boolean
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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