Typescript 如何防止对象被扩展?
当扩展一个类时,类上的对象类型被抛出,我可以添加任何我想要的属性。我怎样才能防止这种情况Typescript 如何防止对象被扩展?,typescript,typescript-typings,Typescript,Typescript Typings,当扩展一个类时,类上的对象类型被抛出,我可以添加任何我想要的属性。我怎样才能防止这种情况 type StaticObject={ a:字符串[]; }; 阶级制度{ staticObject?:staticObject; } 导出默认类ToggleInputSystem扩展系统{ staticObject={//应为类型错误,但未显示任何错误 答:[“你好”], 补充:是的 }; } 这是由于typescript中类型解析的性质造成的。当您键入一个变量:Lets是一个数字(let a:numb
type StaticObject={
a:字符串[];
};
阶级制度{
staticObject?:staticObject;
}
导出默认类ToggleInputSystem扩展系统{
staticObject={//应为类型错误,但未显示任何错误
答:[“你好”],
补充:是的
};
}
这是由于typescript中类型解析的性质造成的。当您键入一个变量:Lets是一个数字(
let a:number
)时,它可以包含number
的所有子类型。这适用于联合类型(let a:1 | 2 | 3
)以及对象。因此,类型{a:number,b:number}
可以用任何对象实现,只要它的键a和键b是number
的(子类型)。此外,通常不需要阻止类型的进一步规范化,因为与接口一起工作的所有函数/类(例如,System
)都将具有预期的所有系统属性类型。他们不在乎其余的
请注意,此规则有一个例外。当您需要一个对象作为函数的参数,并将其声明为内联(在函数调用中)时,typescript将抛出一个错误
function f(options: {duration: number, easing: string}) {}
f({duration: 200, somethingElse: "hi", easing: "ease"}) // Err
let optionsEnhanced = {duration: 200, somethingElse: "hi", easing: "ease"}
f(optionsEnhanced) // No Err
这在一开始看起来可能令人困惑,但实际上只是警告您,内联声明的选项有一个永远不会被使用的属性(因为除了在函数内部之外,在任何地方都没有对它的引用)