Ошибка приведения универсального типа к конкретному

У меня есть следующая функция TypeScript:

add(element: T) {
 if (element instanceof class1) (<class1>element).owner = 100;
}

проблема в том, что я получаю следующую ошибку:

Ошибка TS2012: невозможно преобразовать 'T' в 'class1'

Есть идеи?

Ответ 1

Нет никакой гарантии, что ваши типы совместимы, поэтому вам нужно выполнить двойное литье в соответствии с приведенным ниже...

class class1 {
    constructor(public owner: number) {

    }
}

class Example<T> {
    add(element: T) {
        if (element instanceof class1) {
             (<class1><any>element).owner = 100;
         }
    }
}

Конечно, если вы используете общие ограничения типа, вы можете удалить бросок и проверку...

class class1 {
    constructor(public owner: number) {

    }
}

class Example<T extends class1> {
    add(element: T) {
        element.owner = 100;
    }
}

В качестве ограничения используется class1, но вы можете решить использовать интерфейс, который должен удовлетворять любой класс, например, он должен иметь свойство с именем owner типа number.