2013-09-11 3 views
12

привет имеют следующую функцию типа сценарияCasting машинопись Generic в

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

проблема я получаю следующее сообщение об ошибке

ошибка TS2012: Не удается преобразовать 'T' в 'class1'

любые идеи?

ответ

22

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

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.