2016-03-13 2 views
2

В TypeScript есть способ расширить класс с общим типом? Обратитесь к моему примеру «гипотетический сценарий», где я хочу, чтобы мой класс, чтобы иметь свойство «порода» (или любой другой):расширение класса с общим T

interface dog { 
    breed: string; 
} 

export class animal<T> extends T { 
    legs: number; 
} 

export class main { 
    private mydog: animal = new animal<dog>(); 

    constructor() { 
    this.mydog.legs = 4; 
    this.mydog.breed = "husky"; //<-- not conventionally possible, but basically want to acheive this 
    } 
} 

ответ

0

Вы не можете, потому что классы определяются во время компиляции, а когда животное класс компилируется T не известен.

Однако вы можете определить свойство типа T внутри животное.

interface dog { 

    breed: string; 

} 

export class animal <T> { 
    actual: T; 
    legs: number; 
} 

export class main { 

    private mydog: animal <dog> = new animal <dog>(); 

    constructor() { 

    this.mydog.legs = 4; 
    this.mydog.actual.breed = "husky"; // this will fail because actual is undefined (you must set it too) 
    } 

} 

Я предполагаю, что это зависит от того, почему вам нужен класс животных, чтобы быть универсальным, но вы также можете просто собака продлить животное.

export class animal { 
    legs: number; 
} 

class dog extends animal { 
    breed: string; 
} 

export class main { 

    private mydog: dog = new dog(); 

    constructor() { 

    this.mydog.legs = 4; 
    this.mydog.breed = "husky"; 
    } 

} 
+0

Спасибо за ваш ответ - иногда в коде - если вы не можете, вы не можете. – MarzSocks

+0

@MarzSocks действительно, но если вы можете дать нам больше информации о том, зачем вам нужна эта настройка, возможно, мы сможем найти решение, которое лучше соответствует вашим потребностям. :) – toskv

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