Свойство 'x' отсутствует в типе 'y'

99
15

Этот код скомпилирован до 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'. Свойство 'nb' отсутствует в типе 'aa'.

Может ли кто-нибудь объяснить мне, почему "nb" и "title" не определены, когда они находятся в app3.ts? Спасибо

спросил(а) 2016-07-19T13:03:00+03:00 4 года, 2 месяца назад
1
Решение
105

Чтобы ответить на ваш вопрос:

Может ли кто-нибудь объяснить мне, почему "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
}

ответил(а) 2016-07-19T15:18:00+03:00 4 года, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема