2017-01-13 2 views
1

У меня есть проблема с общим свойством. И какое-то решение для него. Что касается кода ниже, вы можете предложить другое решение?Наследование наложения машинописных текстов и общее свойство

interface IConfig{ 
    property?: number; 
} 

interface IChildConfig extends IConfig{ 
    otherProperty?: number; 
} 

class Base<T extends Base<any, IConfig>, U extends IConfig>{ 

    protected _config: U | IConfig = { 
    property: 10 
    }; 

    public config(){ 
    return <U>this._config; 
    } 
} 

class Child extends Base<Child, IChildConfig>{ 

    protected _config: IChildConfig = { 
    property: 20, 
    otherProperty: 10 
    } 
} 

let a = new Child(), 
    b = new Base(); 

a.config(); 
b.config(); 

В примере я устанавливаю тип свойства _config в U | IConfig, чтобы избежать ошибок. Если я удалю компилятор детали «| Config», вы вызовете ошибки. Как я понимаю, тип U должен быть равен или расширить интерфейс IConfig.

ответ

2

Если установить _config ввести U то машинопись не может теперь возможно ли _config имеет правильный тип, потому что это зависит от того, что U на самом деле. Также не существует такой вещи, как перегрузка свойств в JavaScript.

Решение зависит от того, что вы действительно хотите достичь, но это будет работать:

abstract class Base<T extends Base<any, IConfig>, U extends IConfig>{ 
    abstract config(): U; 
} 
+0

Спасибо Lodewijk. Причина, почему мне нужна такая структура, что у разных детей может быть собственное конфигурационное или базовое свойство конфигурации, поэтому в некоторых случаях config может быть расширен, а в других случаях он может быть базовым. – Vayrex

Смежные вопросы