我只是在阅读此example Angular test,看到了一些以前从未见过的语法。
有一个单元测试,将变量声明为自定义类型:let expectedHeroes: Hero[];
然后,它设置该变量的值,但最后使用as Hero[]
,鉴于该变量已被键入,我认为这是不必要的:
beforeEach(() => {
heroService = TestBed.get(HeroesService);
expectedHeroes = [
{ id: 1, name: 'A' },
{ id: 2, name: 'B' },
] as Hero[]; //<== WHAT IS THIS?
});
那么SECOND
as Hero[]
是否真的在做任何事情,或者没有第二种类型声明就可以吗? 最佳答案
考虑到上面已经声明了let expectedHeroes: Hero[]
,如果expectedHeroes
中的对象具有Hero
类定义的所有属性,则as Hero[]
在这里似乎是不必要的。
但是,如果expectedHeroes
中的对象包含Hero
类定义的属性的子集,则as Hero[]
可能是仅提供测试所需的属性的一种方法,同时又使编译器保持满意(这不会在运行时很重要)。
编辑:@ProfessorAllman已经注意到Hero
类具有Clone
方法,该方法似乎支持我上面写的内容。如果测试人员仅测试其他属性,则他们可能不想在测试中模拟该方法。
关于javascript - 使用“as”的这种Typescript显式类型转换到底在做什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48645742/