angular 2导出接口初始化组件内部问题

时间:2017-03-30 09:50:24

标签: angular interface initialization components

我有一个愚蠢的问题。在我的组件内我导出一些接口,当我尝试在我的组件中使用它们如果我不初始化它我正在解决关于unifined的问题我完全正常。这些是否可以在没有再写入所有代码的情况下启动它们?

export interface Data {
    Code: string;
    Date: Date;
    OccurredDate: Date;
    Person: Person;
    Vehicle: Vehicle;
    Policy: Policy;
    OccurredLocation: OccurredLocation;
    Phones: Phone[];
    Notes: string;
    Actions: Action[];
}

export interface RootObject {
    Data: Data[];
    IsSuccessful: boolean;
    Messages: any[];
}

这些是我的2个接口,我按照这样开始:

export class SubscriberComponent {
        public myRootObject: RootObject = {
            Data: this.myData[0],
            IsSuccessful: true,
            Messages: null
        }
        public myData: Data ={
            Code: '',
            Date: new Date(),
            OccurredDate: new Date(),
            Person: null,
            Vehicle: null,
            Policy: null,
            OccurredLocation: null,
            Phones: null,
            Notes: '',
            Actions: null,
    }
}

当我尝试使用myData.Code时,如果我没有使用''我得到了错误。没有那么多代码的任何其他方式来初始化我的模板?

1 个答案:

答案 0 :(得分:8)

如何初始化Data类型的对象的简短答案是:

myData = {} as Data;

但是更多的解释......对于程序员本人以及IDE来说,接口更像是一种“帮助”,它可以用波浪线和错误“警告”你,你现在正在分配错误类型的值

在运行时,这并不重要。 Typescript是JavaScript的超集,TS在运行时将被编译为JS,在JS中没有接口。

为了介绍接口,我们可以说我们有这样的接口:

interface Foo {
  bar: number
  bas: string
}

和一个像这样初始化的对象:foo = {} as Foo;

由于使用接口,IDE很有用,并警告您将错误类型的数据分配给foo.bar但是这仍然会运行并将对象分配给foo.bar

this.foo.bar = { id:1, name: "name" };

正如在答案中提到的那样,如果 需要}对象的默认值,初始化对象的正确方法是:

Data

这将解决您的myData = {} as Data; 问题,因为该对象已初始化为空对象。因此,除非您需要默认值,否则您可以看到初始化属性非常无用,因为甚至可以覆盖属性的类型。

以下是一个如何使用对象覆盖字符串值的示例,只是为了对上面解释的内容进行一些参考:)

Demo