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时,如果我没有使用''我得到了错误。没有那么多代码的任何其他方式来初始化我的模板?
答案 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" };
正如在答案中提到的那样,如果 需要1>}对象的默认值,初始化对象的正确方法是:
Data
这将解决您的myData = {} as Data;
问题,因为该对象已初始化为空对象。因此,除非您需要默认值,否则您可以看到初始化属性非常无用,因为甚至可以覆盖属性的类型。
以下是一个如何使用对象覆盖字符串值的示例,只是为了对上面解释的内容进行一些参考:)