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