Я думаю, что я могу сделать что-то вроде этого, чтобы создать новый экземпляр Generic в машинописном:Могу ли я сказать TypeScript, что тип Generic имеет конструктор?
class Tree<T extends SomeInterface> {
constructor(private elementType: {new(): T}) {
}
public Grow() {
var newElement: T = new this.elementType();
// ...
}
}
Но есть ли способ, чтобы машинопись знать, что Generic имеет new()
? Другими словами, есть ли способ заставить что-то подобное работать?
class Tree<T extends SomeInterface> { // <-- Modify the constraint?
public Grow() {
var newElement: T = new T();
// ...
}
}
Вы можете использовать тип подписи конструкции в ограничении. Но является ли 'T' предназначенным для типа функции конструктора или типом результата' new'ing some value? Вы используете его в двух вариантах в опубликованных примерах. –
Я преследовал это. Надеюсь, вы найдете решение. Как я получил из документации (http://www.typescriptlang.org/Handbook#generics-generic-constraints), вы не можете использовать параметр типа в таком ограничении: «function find> (n: T, s: U) {... ". Так что мне кажется, что ответ на вопрос «Нет» на какое-то время. –
TSV
@RyanCavanaugh T предназначен для того, чтобы быть типом результата ... Полагаю, теперь я понимаю, что ваш вопрос о том, что 'new' вызывается на конструкторе, а не на« типе ». Поэтому, я думаю, чтобы получить свой предполагаемый результат, мне пришлось бы создать какой-то интерфейс «Createable» и дать ему функцию «Create()»? – Eric