背景
被打字稿困住了。我理解這個宣告:
let varName:number; //null,string,..declare simple variables.
let arrName:string[] // or arrName:number[]. etc
顯然這用于物件:
//knowing type of the property
let obj: {property:string, also:number[]} = {property:'hello', also:[1,2,3]}
//now knowing the type of the property
let obj: {property:any, also:any[]} = {property: a && b || c, also:[1,'string', 'etc']}
但是當我們事先不知道屬性的名稱時會發生什么?
特別是,我正在嘗試翻譯這個 JS 位:
let myObj = {}
myObj[prop] = value
但是我們事先不知道這些屬性的名稱。
uj5u.com熱心網友回復:
您有幾個選擇:
您可以使用允許任何字串或任何數字的索引簽名型別,例如:
let myObj: {[key: string]: number} = {}; myObj[prop] = value;...允許任何字串屬性名稱,其值應為數字。(或者你可以使用
{[key: number]: number},使按鍵的數字。string而且number是你只有兩個指數的簽名選項。)您可以使用
Record實用程式 type,例如Record<string, number>,它的作用與上述相同:let myObj: Record<string, number> = {}; myObj[prop] = value;您可以使用 a
Map而不是物件:let myObj: Map<string, number> = new Map(); myObj.set(prop, value);
在所有這三個中,number由于值型別只是一個示例,它可以是您想要的任何型別(包括聯合型別),或者unknown如果您不知道型別,或者any如果您想允許任何型別。
這可能很明顯,但我還是要說:這確實意味著 TypeScript 無法幫助您在物件上使用錯誤的屬性名稱。:-) 但是如果屬性名稱是運行時的東西,那這是不可避免的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/382658.html
標籤:打字稿
