我可以这样做:
var a: number = 99;
但是如何在对象内部定义a
:
var ob = { a: 99 }
或
class AClass {
ob = { a: 99 };
constructor() {
}
}
使用界面是唯一的方法吗?
答案 0 :(得分:3)
不需要界面。如果你只想定义对象的“形状”,而没有明确的类/接口声明,你可以这样做:
var ob: { a:number } = {a: 99};
在您的课程示例中,它看起来像这样:
class AClass {
ob: { a:number } = { a: 99 };
constructor() {
// tsc knows that this.ob.a is of type number
}
}
这也适用于复杂的对象:
var ob: {
a:number;
b: {
stringVal:string;
numero:number;
bitflag:Boolean
}
} = {
a: 99,
b: {
stringVal: "Some string value here",
numero:1234,
bitflag:true
}
};
这种语法在函数声明中非常有用,你知道你期望一个具有特定属性的对象:
function(someObject: {stringVal:string; numero:number})
// TypeScript now knows that someObject will have a "stringVal" string property, and a "numero" number property
}
现在,话虽如此,我建议您仔细考虑界面是否更适合。如果这是一个简单的对象形状,并且一次性情况不会再发生,那么声明内联形状(如上所述)可能没问题,但是如果你曾要有一个对象在其他地方具有相同的形状,将它声明为接口可能是有意义的,然后您可以重新使用该接口。如果你正在处理一个深层次的复杂对象,这是双重的。尝试全部内联可能会非常难看。
答案 1 :(得分:0)
你可以这样定义一个类:
var a: number = 99;
class Ob{
constructor(public a: number){}
}
var newOb = new Ob(a);
newOb.a // should equal 99 then.