簡體   English   中英

typescript 獲取數組值的類型,例如鍵的情況?

[英]typescript get type of array value like in case of keys?

我可以做這個

const keys = {
    "hi": {name: "ho"}
}
type U = [keyof typeof keys][0]; // "hi"

我也可以使用數組值嗎?

const data = [
    { name: "hi" }
];
type T = typeof data[0]["name"]; // string not "hi"

https://www.typescriptlang.org/play/?ssl=9&ssc=1&pln=10&pc=1#code/MYewdgzgLgBAJgQygmBeGBtAUDXMDeMYCAtgKYBcMARABYCW1MAvlgLoDcWWoksA1mQCeENARx46jKvmLkqdENVassUIQAcyMACpj1WkADN4SBBgAMbDNTllqnNZu0BVMRkFDjMA2W+eIaysOIA

只需將as const添加到您的數據中:

const data = [
    { name: "hi" }
] as const;

沒有as const ,數據被推斷為Array<{name: string}> 您不需要as const作為keys ,因為它被推斷為{hi: {name: string}}

因為數組的元素可以在運行時改變,TS 只會將數據類型推斷為Array<{ name: string }> 您必須將data數組的類型顯式設置為readonly ,因此 TS 可以將數據數組中第一個元素的類型推斷為{name: "hi"}

解決方案是將as const添加到數據數組中。

const data = [
   {name: "hi"}
] as const;
// this will make TS infer the type for data as readonly[{ readonly name: "hi";}]

ts 操場上的演示

暫無
暫無

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

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