typescript - 为什么 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 可能是未定义的!!” 对我大喊大叫。
谢谢!
解决方案
您告诉它,对于每个 petName,都有一个宠物。采用:
interface MyPets {
[petName: string]: {
name: string;
species: string;
age: number;
} | undefined
}
相反,如果您想要更严格的类型安全性。
推荐阅读
- asp.net-core - 在 ASP.NET Core 3 中编辑表单模型
- ios - 如何在 SceneKit 中使用半透明纹理?
- python - 尝试使用 Pygame 制作剪刀石头布游戏
- git - 提交时的 git(复杂)转换文件
- c# - 将“react js”构建到我的“asp.net core web api”的 wwwroot 文件夹时出现路由问题
- java - Java:NoSuchMethodException,即使该方法存在
- django - 模型的Django默认信息
- adfs - 应为 ADFS 签署注销请求?
- python - Pytorch 在 eval 模式下输入时崩溃
- c - 如果不使用线程,原子性仍然是一个问题吗?