[英]TypeScript map over Object's keys and values
只需將從 Object.keys 返回的字符串轉換為數據 object 的鍵。
const DATA = {
name: "John",
surname: "Smith",
gender: "Male"
}
const result = Object.keys(DATA).map((d: string) => `${d} - ${DATA[d as keyof typeof DATA]}`)
你需要告訴 typescript 你的 object 的鍵是字符串類型的。
const DATA: {[key: string]: string} = {
name: "John",
surname: "Smith",
gender: "Male"
}
const result = Object.keys(DATA).map((d: string) => `${d} - ${DATA[d]}`)
Object 的鍵本身沒有明確地鍵入為字符串。
當你這樣做
Object.keys(DATA)
您將姓名、姓氏、性別作為值傳遞給 map,而不是 John、Smith、Male。
要鍵入密鑰,您需要像這樣鍵入 object:
type DataType = {[key:string]: string }
const DATA:DataType =
{
name: "John",
surname: "Smith",
gender: "Male"
}
元素隱式具有
any
類型,因為string
類型的表達式不能用於索引類型{name: string; surname: string; gender: string; }
{name: string; surname: string; gender: string; }
{name: string; surname: string; gender: string; }
。
在類型...
上找不到帶有string
類型參數的索引簽名
Record
類型const DataRecord: Record<string, string> = {
name: "Johnny-come-lately",
surname: "Smithers",
gender: "Male"
}
for (const key of Object.keys(DataRecord)) {
console.log(`${key}: ${DataRecord[key]}`);
}
const DataIndexableType: {[key: string]: string} = {
name: "Johnny-come-lately",
surname: "Smithers",
gender: "Male"
}
for (const key of Object.keys(DataIndexableType)) {
console.log(`${key}: ${DataIndexableType[key]}`);
}
Object.entries()
如果由於某種原因為 object 添加類型信息不切實際,則可以在不使用類型轉換的情況下使用Object.entries()
。
const DATA = {
name: "John",
surname: "Smith",
gender: "Male"
}
// Object.entries
for (const [key, value] of Object.entries(DATA)) {
console.log(`${key}: ${value}`);
}
// Or Object.entries.map
Object.entries(DATA).map( ([key, value]) => console.log(`${key}: ${value}`));
const DATA = {
name: "John",
surname: "Smith",
gender: "Male"
}
// Object.keys with typecast on key.
for (const key of Object.keys(DATA)) {
console.log(`${key}: ${DATA[key as keyof typeof DATA]}`);
}
const DATA = {
name: "John",
surname: "Smith",
gender: "Male"
}
// Object.keys with typecast on object.
for (const key of Object.keys(DATA)) {
console.log(`${key}: ${(DATA as {[key: string]: string})[key]}`);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.