首页 > 解决方案 > 为什么 TypeScript 在使用计算属性时假定所有属性都存在?

问题描述

我想知道为什么 TypeScript 允许以下示例。我认为有一个很好的理由,但我不明白为什么。谁能解释一下它背后的想法?很想更好地理解这一点。

假设我有一个要存储一堆宠物信息的对象。我将动态添加和删除它们,并且我想按名称键入它们,所以我制作了一个这样的界面:

interface MyPets {
    [petName: string]: {
        name: string;
        species: string;
        age: number;
    }
}

const myPets: MyPets = {
    ernie: {
        name: 'ernie',
        species: 'dog',
        age: 5,
    }
}

// No error
console.log(myPets.chloe.species)

我会假设 TypeScript 会说“嘿等等,myPets.chloe 可能是未定义的!!” 对我大喊大叫。

TypeScript 游乐场示例

谢谢!

标签: typescript

解决方案


您告诉它,对于每个 petName,都有一个宠物。采用:

interface MyPets {
    [petName: string]: {
        name: string;
        species: string;
        age: number;
    } | undefined
}

相反,如果您想要更严格的类型安全性。


推荐阅读