【发布时间】:2023-02-22 03:33:50
【问题描述】:
为什么 TypeScript 看不到我正在尝试传播具有不属于 Baby 类型属性的 Human 类型的对象?这不仅适用于这个例子,它适用于任何对象是属性的超集。对于不显示错误的 TS 来说,拥有该类型的所有属性就足够了,但您可以传递比您需要的更多的属性。为什么?如果我可以将任何超集对象传递给它,类型有什么意义..
我真的必须手动从上层对象中选择属性以确保我不会传递超过我需要的属性吗? 想象一下,如果我省略 100 个属性并展开对象,并且仍然在内存中获取所有这些属性。这打败了我的类型的目的
interface Human {
name: string;
surname: string;
age: number;
}
const human1: Human = {
name: "Chad",
surname: "Lingovski",
age: 26,
};
type Baby = Omit<Human, "age">;
const baby1: Baby = { ...human1 }; //this is allowed, why?
const baby2: Baby = { name: "Chad", surname: "Lingovski", age: 26 }; //this is not allowed
我希望 TS 显示错误。它不允许我访问年龄属性,但我可以控制台记录整个对象和年龄。
【问题讨论】:
-
因为打字稿只会阻止您添加不存在的文字键。
Baby仍可分配给Human。 -
因为
Human拥有Baby需要的所有属性 -
我的问题是,如果我明确说明我的类型需要什么,为什么我可以将 Human 分配给 Baby。我不需要更多,我需要的正是我写的
标签: javascript typescript javascript-objects