@AndrewRusinas

Как правильно добавить новое публичное поле в класс на TypeScript?

Пробую TypeScript.
class Main {
    constructor(public name: string) {}
}

class Sub extends Main {
    constructor(name: string, public lastname: string) {
        super(name)
    }
}

const sub = new Sub('michael', 'jackson')

function hello (person: Main) {
    console.log(person.name)
    console.log(person.lastname)
}

hello(sub)


Получаю такую ошибку:
5e6fbe436930b713657828.png

Что я делаю не так и насколько это корректный синтаксис?
Я понимаю, что ошибка закономерна, что в классе Main такого свойства нет. Но мне нужно передавать в функцию другой класс, наследованный от Main.

Не бейте нуба :(
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
bingo347
@bingo347 Куратор тега TypeScript
Crazy on performance...
Вообще для таких штук придумали интерфейсы:
interface ISubMain {
    name: string;
    lastname: string;
}
class Main {
    constructor(public name: string) {}
}

class Sub extends Main implements ISubMain {
    constructor(name: string, public lastname: string) {
        super(name)
    }
}

const sub = new Sub('michael', 'jackson')

function hello (person: ISubMain) {
    console.log(person.name)
    console.log(person.lastname)
}

hello(sub)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Aetae
@Aetae Куратор тега TypeScript
Тлен
Ну или просто проверять что класс пришёл именно тот что надо.)
class Main {
    constructor(public name: string) {}
}

class Sub extends Main {
    constructor(name: string, public lastname: string) {
        super(name)
    }
}

const sub = new Sub('michael', 'jackson')

function hello (person: Main) {
    console.log(person.name)
    if(person instanceof Sub) {
        console.log(person.lastname)
    }
}

hello(sub)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы