我正在嘗試創建一個計數器,說明哪個字符在字串中出現最多。
function maxChar(str: string) {
const strObj = {}
let maxCount = 0
let maxChar = ""
for (let char of str) {
strObj[char] = strObj[char] 1 || 1
}
for (let key in strObj) {
if (strObj[key] > maxCount) {
maxCount = strObj[key]
maxChar = key
}
}
return maxChar
}
但是,打字稿強調strObj[char]和strObj[key],給出錯誤:
元素隱式具有“任何”型別,因為“字串”型別的運算式不能用于索引型別“{}”
顯然strObj = {}需要分配型別,但我不知道如何將型別分配給空物件。
uj5u.com熱心網友回復:
您使用strObj的就像一個字典,其鍵是任何字符,其值是number(或undefined)。TypeScript 內置的最接近的東西是具有string 索引簽名的型別:
const strObj: { [k: string]: number } = {}
現在,編譯器將允許您strObj使用任何string-valued 鍵(包括所有單字符長字串)進行索引,并允許您從中讀取/寫入number值。(從技術上講,也許它應該更加小心undefined,但大多數人使用undefined和索引簽名做正確的事情,所以編譯器會忽略它。如果你真的很在意,你可以撰寫number | undefined或啟用編譯器選項,但所做的只是讓它更多--noUncheckedIndexedAccess寫你的代碼很煩人。)
無論如何,現在您的代碼示例的其余部分將毫無錯誤地編譯。
請注意,該型別也{[k: string]: number}可以Record<string, number>使用實用程式 type來撰寫。無論哪種方式都對應于一個物件型別,它允許 any作為鍵,并且其值(如果存在)將是 type 。Record<K, V>stringnumber
Playground 代碼鏈接
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/520849.html
標籤:打字稿目的类型
下一篇:在物件中搜索值并放入新陣列
