此代码在TypeScript 1.8之前编译,现在不再存在。
//[in app3.ts]
declare module App {
export interface Iaa {
nb: number;
}
export interface Ibb extends Iaa {
title: string;
}
}
和
//[in app4.ts:]
/// <reference path="app3.ts"/>
module App {
"use strict";
export interface Iaa extends aa {
}
export class aa {
constructor() {
}
test(): void {
var that: Iaa = <Iaa>this; //Error
}
}
export interface Ibb extends bb{
}
export class bb extends aa {
constructor() {
super();
}
test(): void {
var that: Ibb = <Ibb>this;//Error
that.nb = 10;
}
}
}
这是错误: app4.ts(15,29):错误TS2352:类型'this'和类型'Iaa'都不能分配给另一个。 类型'aa'不能分配给'Iaa'类型。 'aa'类型中缺少属性'nb'。
有人可以解释一下为什么'nb'和'title'在app3.ts中时未定义? 谢谢
答案 0 :(得分:0)
回答你的问题:
有人可以解释一下为什么'nb'和'title'在app3.ts中时未定义?
可能是因为您尝试放入Iaa
aa
的一个实例,它与Iaa
没有任何共同之处(没有属性匹配)。能够做到这一点aa
需要实施Iaa
或至少拥有相同的属性。
案例Ibb
如何让你的代码再次运作。
declare module App {
export interface Iaa {
nb: number;
}
export interface Ibb extends Iaa {
title: string;
}
}
module App {
"use strict";
export interface Iaa extends aa {
}
export class aa {
constructor() {
}
test(): void {
var that: Iaa = <Iaa>this; //Error
}
nb: number; // <-- add that
}
export interface Ibb extends bb {
}
export class bb extends aa {
constructor() {
super();
}
test(): void {
var that: Ibb = this as Ibb;//Error
that.nb = 10;
}
title: string; // <-- add that
}