Ошибка приведения универсального типа к конкретному У меня есть следующая функция 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.
Ответ 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.