Пример:
class Temp {
static decode(buf: Uint8Array): Temp {
return new Temp();
}
}
function decode<T>(buf: Uint8Array): T {
return T.decode(buf);
}
let a = decode<Temp>(new Uint8Array());
Нет, в машинописном тексте это тоже невозможно.
Но вы могли бы сделать что-то вроде этого:
class Base {
static decode<T>(buf: Uint8Array): T {
return instantiate<T>(); // `instantiate` is AssemblyScript's builtin
}
}
class Temp extends Base {
}
let a = Base.decode<Temp>(new Uint8Array(1));
Если вы знаете, что вывод является ссылкой, вы можете использовать макрос changetype
следующим образом.
changetype<T>(changetype<usize>(T.decode(buf)));
Вы будете нести ответственность за то, чтобы выходные данные функции декодирования соответствовали определению типа данных T
.
Это небезопасно, и вам нужно знать, что вы делаете.
Спасибо
Самый полезный комментарий
Нет, в машинописном тексте это тоже невозможно.
Но вы могли бы сделать что-то вроде этого: