Javascript 有没有一种方法可以将类型为';任何';
我有一个不能更改的父对象类型为“any”(我在单元测试中使用Javascript 有没有一种方法可以将类型为';任何';,javascript,typescript,Javascript,Typescript,我有一个不能更改的父对象类型为“any”(我在单元测试中使用this对象),并且我定义父对象的属性,但无论我做什么,它总是松散地使用“any”类型。在运行时之前,Casting似乎也不会做任何事情。有没有一种方法可以在运行时之前强键入我的属性,这样我就可以让Typescript在分配虚假属性时抛出错误 interface AType { bar: number bas: string } let something: any = {}; // Make this proper
this
对象),并且我定义父对象的属性,但无论我做什么,它总是松散地使用“any”类型。在运行时之前,Casting似乎也不会做任何事情。有没有一种方法可以在运行时之前强键入我的属性,这样我就可以让Typescript在分配虚假属性时抛出错误
interface AType {
bar: number
bas: string
}
let something: any = {};
// Make this property respect 'AType' typing.
something.anythingElse = <AType>{
bar: 1,
bas: 'one',
};
// Doesn't throw an Error but it should
something.anythingElse.bogusAssignment = '1234';
接口类型{
酒吧:号码
巴斯:弦
}
让某物:any={};
//将此属性设置为“AType”类型。
something.anythingElse={
酒吧:1,
bas:‘一’,
};
//不会抛出错误,但它应该
something.anythingElse.bogusAssignment='1234';
在上面的注释之后,除了常规的类型断言之外,您可以考虑使用类型保护:
interface AType {
bar: number
bas: string
}
let something: any = {};
something.anythingElse = <AType>{
bar: 1,
bas: 'one',
};
// below type guard definition.
function isAType(arg: any): arg is AType {
return arg && arg.anythingElse; // <-- add further type checkings here.
}
const somethingElse = something.anythingElse;
if (isAType(somethingElse)) {
somethingElse.bogusAssignment = '1234';
//^---- this will throw compile error and intellisense error as well.
}
接口类型{
酒吧:号码
巴斯:弦
}
让某物:any={};
something.anythingElse=
编辑:对于下面的评论,这里是您可以采取的另一种方法:是什么阻止您为父级提供更强的类型
something: Partial<{anythingElse: AType}>
部分的
你可以做让一些事情:{[key:string]:AType}
。表示something
将是一个具有字符串键和AType对象值的对象,或者让something:{[key:string]:any,anythingElse?:AType}={}
我本应将此添加到问题中,但我正在向单元测试的this
变量中添加一些内容,并且不能从any
更改对象类型。然后使用类型断言()进行此操作。使用所需的全部约束定义一个接口,然后进行类型断言,如:(类似于MyInterface)代码>。这将是一种方法@briosheje,是的。但我希望有一个比更改此属性的每个引用以使用类型断言更简单的解决方案。这可能是唯一的办法…直到什么类型的守卫是,谢谢!同样,这解决了问题,但对于我的具体问题来说,这似乎不是一个好的解决方案。我必须将每个单元测试都封装在这个防护的if语句中。我真的在寻找一个单行解决方案,或者即使存在一个,我真正想要的是对这一行做一些事情,以便它识别出某个东西。anythingElse具有AType类型<代码>某物。任何东西={
@zachshuffeld我认为除了类型断言之外,你找不到任何其他的解决方案。Typescript的使用正是为了避免这种情况。具体地说,你应该重新设计你的代码来解决这个问题,在这种情况下,关键是有效地设计代码。你可以检查以下内容:。你可能想创建一个范围为ju的方法st将对象强制转换为接口,以便您可以替换整个代码。检查更新的答案。我的用例中的父项是jasmine单元测试中的this
关键字。无法重新键入this
(AFAIK…)