我想在 TypeScript 中創建一個型別并使用另一個物件的值作為其鍵
const routes = {
home: "HOME",
profile: "PROFILE"
}
export type NavigatorParamList = {
[routes.home]: undefined;
[routes.profile]: undefined;
};
我知道這段代碼不起作用!知道怎么做嗎?
uj5u.com熱心網友回復:
您物件的屬性是可變字串,TypeScript 不允許您將它們用作型別的計算屬性,除非您使用as const.
const routes = {
home: "HOME",
profile: "PROFILE"
} as const;
uj5u.com熱心網友回復:
這就是字串列舉的用途:
TS游樂場
enum Route {
Home = "HOME",
Profile = "PROFILE"
}
// using a union of individual enum members:
type NavigatorParamList1 = Record<Route.Home | Route.Profile, undefined>; // { HOME: undefined; PROFILE: undefined; }
// or if you want to use all enum members:
type NavigatorParamList2 = Record<Route, undefined>; // { HOME: undefined; PROFILE: undefined; }
// or independently-defined members
type NavigatorParamList3 = {
[Route.Home]: undefined;
[Route.Profile]: undefined;
}
uj5u.com熱心網友回復:
使用映射型別和新as子句是可行的:
const routes = {
home: "HOME",
profile: "PROFILE"
} as const;
type AcceptableKeyTypes = string | number | symbol;
type ObjectWithValuesWhichCanBeKeys = {[key: AcceptableKeyTypes]: AcceptableKeyTypes};
type ValuesAsKeys<T extends ObjectWithValuesWhichCanBeKeys> = {[P in keyof T as T[P]]: unknown};
let test: ValuesAsKeys<typeof routes> = {HOME: 7, PROFILE: 4};
打字稿游樂場
我在這里使用通用型別:ValuesAsKeys<T>.
T 的值需要限制為可接受的鍵型別: string | 數量 | 象征。
該[P in keyof T]部分是一個映射型別,它遍歷 T 的所有鍵。然后,該as子句將鍵映射到一個新值,在本例中為 to T[P],即當前迭代鍵的值。
最后,該值是未知的,因此您可以使用任何您想要的新值。在我給出的例子中,我使用數字作為新值,但它可以是任何東西。
請注意,如其他答案中所述,routes需要有as const斷言,以便將字串值視為文字型別,然后可以將其用作鍵入的鍵。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/393490.html
標籤:javascript 打字稿
上一篇:如何使用.repeat()重復隨機字串并使其仍然隨機?
下一篇:TypeError:undefined不是ReactJS中的物件(評估“event.preventDefault”)
