2017-02-14 123 views
0

这是我的第一个问题,所以我希望我会正确地问它。所以,对于我的项目,我需要创建几个组,并在每个组中创建几个人。现在,我已经创建的组中的一个文件,谁是这样的人的一个文件:班级角2 2

import { Person} from '../person/person'; 
export class Group { 
    id: number; 
    name: string; 
    I: Person; 
} 

和:

export class Person { 
    name: string; 
    phone:number; 
} 

现在,当我想为我的小组一个模拟文件,我尝试这样做:

import { Group } from './group'; 
import { Person} from '../person/person'; 

I: Person= { 
    name:"test" 
    phone: 25 
}; 
export const GROUPS: Group[] = [ 
    {id: 1, name: "Chefs d'agence", I:Person}, 
] 

(不注重这个名字,我是法国人),但它没有工作,所以我尝试这样的:

import { Group } from './group'; 
import { Person} from '../person/person'; 

export const GROUPS: Group[] = [ 
    {id: 1, name: "Chefs d'agence", I:Person={name:"test",phone:25}, 
] 

但最后,我用这种类型的错误完成对集团:

Type '{ id: number; name: string; I: typeof Individu; }[]' is not assignable to type 'Groupe[]'. 
Type '{ id: number; name: string; I: typeof Individu; }' is not assignable to type 'Groupe'. 
    Types of property 'I' are incompatible. 
     Type 'typeof Individu' is not assignable to type 'Individu'. 
     Property 'nom' is missing in type 'typeof Individu'. 

现在我不跟人的阵列,但只是一个人进行测试,但是我不知道如何做到这一点。

+0

需要查看'Interface' – anshuVersatile

+0

'I:Person = new Person(); I.name =“Something”.......' – anshuVersatile

回答

1

看起来你很困惑接口

您提供的代码似乎表明您要使用接口。

你可以声明接口是这样的:

export interface Person { 
    name: string; 
    phone: string; 
} 

export interface Group { 
    id: number; 
    name: string; 
    persons: Person[]; 
} 

,然后使用它们:

const p: Person = { name: 'Pierre', phone: '01.02.03.04.05' }; 
const g: Group = { id: 340, name: 'Administrateurs', persons: [p] }; 

其他注意事项:

  • 电话号码是几乎从来没有的键入number(如果数字从零开始?如果需要包含国家代码或分隔符,例如+33?...)
  • 这是一个设计选择,但我会把这些组放在Person界面上,而不是像你那样做。这将导致以下接口:
export interface Group { 
    id: number; 
    name: string; 
} 

export interface Person { 
    name: string; 
    phone: string; 
    groups: Group[]; 
} 

什么接口和类之间的区别?

接口只描述数据的形状。您可以使用它们来告诉TypeScript编译器(和您的IDE)在您的代码中的特定位置需要什么类型的数据(例如,此方法应该返回此类型的数据,此变量应该包含此类型的对象...)。将TypeScript转换为JavaScript后,接口将从代码中消失。

,另一方面,可以是实例化。这意味着他们可以保存数据(在类实例中)并实现行为(在类方法中)。即使一个TypeScript类只是用来强制一个对象的形状(作为一个接口),它可以做的不仅仅是这些。此外,类仍然保留在最终的JavaScript代码中(在传输之后)。

+0

我跟着Angular.io上的英雄之塔的tuto,并且在它里面,他们使用导出类Heroes而不是接口,这就是为什么我想要使用它是这样的。 但是,我发现一种方式感谢您的解释,我会在另一个评论中发布它(因为我现在正在编辑,我不知道Enter是自动发送消息) –

+0

如果我这样做: ' [name:'chefs d'agence',I:[name:'test',phone:'25'}, {name:'test2',电话:'28'} ]}, {id:2,name:'Clients',I:[ {name:'essai',phone:'46'}, {name:'essaie2',phone: '28'}]} ]' 它可以工作,我可以在我选择的组中找到我要找的人。我认为,在angular2中,我们可以像使用类一样使用接口,或者我误解了tuto中的某些东西。 感谢您的帮助,并对我的英语感到抱歉(我在语法和词汇上很糟糕:() –

+0

在某些情况下,您可以使用一个类或一个接口,主要区别是一个类可以实例化,而一个界面不能,我已经更新了我的答案,使这一点更加清晰。 – AngularChef