具有angular2的typescript中的对象类型数组

时间:2016-06-23 04:33:36

标签: arrays typescript

在我的角度应用程序中,我想以下面的方式使用id和role的对象数组

let userRole: Array<...> = [
                       { id: 1, name: 'Admin' },
                       { id: 2, name: 'Super Admin' },
                       { id: 2, name: 'User' },
                       { id: 2, name: 'Watcher' }
                    ];

但我很困惑需要填补哪些 ...

Array < Object >Array <Any>

试用1:

var role = { id: number; name: string; };

然后Array <role>,但它会出错

试用2:添加不同的类文件

role.ts

export class Role {
    constructor(
        public id: number,
        public name: string
    ) { }
}

并将我的文件添加为

import { Role }      from './role';

export class HeroFormComponent {

   let userRole: Array<Role> = [
                       { id: 1, name: 'Admin' },
                       { id: 2, name: 'Super Admin' },
                       { id: 2, name: 'User' },
                       { id: 2, name: 'Wacher' }
                    ];

但是给出错误

错误:SyntaxError:意外的严格模式保留字

1 个答案:

答案 0 :(得分:5)

您的第一个也是最好的选择就是没有类型注释:

let userRole = [
                       { id: 1, name: 'Admin' },
                       { id: 2, name: 'Super Admin' },
                       { id: 2, name: 'User' },
                       { id: 2, name: 'Watcher' }
                    ];

userRole的推断类型为Array<{ id: number, name: string }>

如果您因任何原因确实需要类型注释,可以编写

let userRole: { id: number, name: string }[] = [ ...

let userRole: Array<{ id: number, name: string }> = [ ...

这两种语法在行为上是相同的。

如果你要经常使用这种类型,你可能想为它创建一个界面,这样你就可以在其他地方重复使用这个名字:

interface Role {
  id: number;
  name: string;
}

现在你可以写

let userRole: Role[] = [ ...

在类中声明初始化字段时,不要使用varlet

export class HeroFormComponent {

   userRole = [
                       { id: 1, name: 'Admin' },
                       { id: 2, name: 'Super Admin' },
                       { id: 2, name: 'User' },
                       { id: 2, name: 'Wacher' }
                    ];

再次在这里,您可以选择您想要的类型注释。