我只是在阅读此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/

10-13 01:47