Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 如何防止对象被扩展?_Typescript_Typescript Typings - Fatal编程技术网

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
这在一开始看起来可能令人困惑,但实际上只是警告您,内联声明的选项有一个永远不会被使用的属性(因为除了在函数内部之外,在任何地方都没有对它的引用)