В машинописи, общие параметры будут стерты во время компиляции, и нет никаких следов их в сгенерированном коде JavaScript. Итак, нет ничего похожего на CreateInstance
с C#.
Но, опять же, в отличие от C#, классы в машинописном тексте могут использоваться во время выполнения, как и любые другие объекты, поэтому, если вам нужно только создать экземпляр класса во время выполнения, вы можете сделать это довольно легко (обратите внимание, что оно применяется только для классов, а не для любого типа вообще).
Синтаксис generic class type argument выглядит немного необычно: это буквальный тип записывается как {new(...args: any[]): T}
Вот полный (компилирует) пример, который делает что-то, как вы описали в своем вопросе. Для упрощения я предположил, что все объекты, которые должны быть созданы, должны соответствовать общему interface Result
(в противном случае вам нужно сделать тип приведения к известному типу в doTheMambo, чтобы сделать что-то полезное).
interface Response { json(): any }
interface Result { kind: string }
function handleResult<T extends Result>(tClass: { new (...args: any[]): T }, response: Response): T {
let jsonResp = response.json();
let obj = jsonResp;
let resp: T = new tClass();
doTheMambo(resp, obj);
return resp;
}
class Result1 {
kind = 'result1';
}
function doTheMambo<T extends Result>(response: T, obj: any) {
console.log(response.kind);
}
const r: Result = handleResult(Result1, { json() { return null } });
Что возвращает 'response.json()'? Объект или строковое представление этого объекта? И если он возвращает объект напрямую, каковы различия между этим объектом и 'T', которые вы надеетесь разрешить в своем' doTheMambo'? – hvd
Response.json возвращает json, doTheMambo сделает какой-то разбор между двумя объектами. – BasicSide
У двух объектов могут быть существенные различия между ними – BasicSide