【发布时间】:2017-09-02 15:20:58
【问题描述】:
我正在尝试为 Angular 2 中的以下对象创建一个接口:
// set the render state object
this.aRenderState = {
model: "",
colour: false,
showWireframe: false,
showGrid: true,
clipping: {
enabled: false,
visible: false,
planes: [
{
name: 'X',
plane: new THREE.Plane(new THREE.Vector3(1, 0, 0), 0),
object: null,
enabled: true,
flip: false,
size: [this.aDomain.getSize().z, this.aDomain.getSize().y],
},
{
name: 'Y',
plane: new THREE.Plane(new THREE.Vector3(0, 1, 0), 0),
object: null,
enabled: false,
flip: false,
size: [this.aDomain.getSize().x, this.aDomain.getSize().z]
},
{
name: 'Z',
plane: new THREE.Plane(new THREE.Vector3(0, 0, -1), 0),
object: null,
enabled: false,
flip: false,
size: [this.aDomain.getSize().x, this.aDomain.getSize().y]
},
]
}
}
以下是我的尝试:
export interface IPlane {
name: string;
plane: THREE.Plane;
object: {};
enabled: boolean;
flip: boolean;
size: number[];
}
export interface IClipping {
enabled: boolean;
visible: boolean;
planes: IPlane[];
}
export interface IRenderState {
model: string;
colour: boolean;
showWireframe: boolean;
showGrid: boolean;
clipping: IClipping;
}
当我运行项目时,我收到以下错误消息:
类型'{模型:字符串;颜色:假;显示线框:假;显示网格: 真的; clipping: { enabled: false;...' 不可分配给类型 'IRenderState'。属性“剪裁”的类型不兼容。 类型'{启用:假;可见:假;飞机:[{名称:字符串;平面:平面;对象:空;启用:t...' 不可分配给类型 '{ 启用:布尔值;可见:布尔值;飞机:[IPlane,IPlane, 飞机]; }'。 属性“平面”的类型不兼容。 键入'[{名称:字符串;平面:平面;对象:空;启用:真;翻转:假;大小:[数量,数量]; ...' 不可分配给 键入“[IPlane,IPlane,IPlane]”。 键入'{名称:字符串;平面:平面;对象:空;启用:真;翻转:假;大小:[数量,数量]; }' 不可分配给 键入“IP 平面”。 属性“大小”的类型不兼容。 类型 '[number, number]' 不能分配给类型 '[0, 0]'。 类型“数字”不可分配给类型“0”。)
我无法理解我做错了什么。
【问题讨论】:
-
在您的 IPlane 界面中,使用 object:object 而不是 object:{}
-
亲爱的约翰,谢谢你的回答,但对象:对象;声明给出了错误找不到名称对象。
-
好的,约翰,只需要声明 object:Object 大写 O。如果您将您的评论放入正确的答案中,我很高兴接受您的解决方案并支持它。再次感谢您的帮助
-
@Dino
object类型是在 TypeScript 2.2 中引入的,因此您需要升级才能使用它。值得注意的是Object和object是不同的!
标签: angular typescript interface