我正在嘗試將我的 Javascript 函式轉換為它的 Typescript 版本,但我無法擺脫讀取的帶下劃線的代碼acc[curr.name](在 VSCode 中)。當懸停在它上面時說:
元素隱式具有“any”型別,因為“string”型別的運算式不能用于索引型別“{}”。在型別“{}”上找不到帶有“字串”型別引數的索引簽名。
我正在按鍵名計算出現次數。
我應該在哪里定義型別以及為什么一個空物件或帶有數字的物件不起作用。我不知道如何解決它,因為我嘗試了多種方法,例如:
data.reduce<{}>()
和 data.reduce<{property: number}>()
代碼:
const data = [
{ name: "name1", },
{ name: "name1", },
{ name: "name1", },
{ name: "name1", },
{ name: "name2", },
{ name: "name2", },
{ name: "name2", },
{ name: "name1", },
];
// count data by key name
const resultData = data.reduce((acc, curr) => {
return acc[curr.name] ? acc[curr.name] : (acc[curr.name] = 1), acc;
}, {});
運行結果:
const resultData = {
name1: 4,
name2: 3,
name3: 1,
};
uj5u.com熱心網友回復:
設定一個索引簽名,如 data.reduce<{ [index: string]: number }>
參考:https : //www.typescriptlang.org/docs/handbook/2/objects.html#index-signatures
const resultData = data.reduce<{ [index: string]: number }>((acc, curr) => {
return acc[curr.name] ? acc[curr.name] : (acc[curr.name] = 1), acc;
}, {});
或者您可以使用as具有初始值的關鍵字。
const resultData = data.reduce((acc, curr) => {
return acc[curr.name] ? acc[curr.name] : (acc[curr.name] = 1), acc;
}, {} as { [index: string]: number });
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/382647.html
標籤:javascript 打字稿
