我有以下型別:
interface USER {
email: string;
age: number;
}
interface SCORES {
likes: number;
followers: number;
}
然后復合狀態如下圖:
interface UserStats {
user: USER;
stats: SCORES;
}
現在我得到一個payload看起來像這樣的:
{type: 'user', values: {email:"[email protected]",age: 21}}
或者
{type: 'stats', values: {likes:20,followers: 21}}
在解構上述有效載荷時,我需要分配它的型別,使其涵蓋這兩種情況,例如:
type payloadKeyTypes = 'user' | 'stats'
type configPayload = USER | SCORES
interface payloadType {
[payloadKeyTypes]: configPayLoad
}
但這說: A computed property name in an interface must refer to an expression whose type is a literal type or a 'unique symbol' type
我該如何解決?
uj5u.com熱心網友回復:
禁止在介面中使用聯合型別作為索引簽名。但是,從 typescript 4.4 開始,您可以使用符號和模板文字字串。
在這種特殊情況下,值得使用Record 型別,因為它允許您使用聯合:
interface USER {
email: string;
age: number;
}
interface SCORES {
likes: number;
followers: number;
}
interface UserStats {
user: USER;
stats: SCORES;
}
type payloadKeyTypes = 'user' | 'stats'
type configPayload = USER | SCORES
type payloadType = Record<payloadKeyTypes, configPayload>
操場
另外,請注意打字稿中有一個命名約定。所有型別/介面/列舉都應該大寫和駝峰式。然而,這只是一個約定。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/403097.html
標籤:
下一篇:聯合事件處理程式型別
