は、一般的なパラメータは、コンパイル時に消去されているC#のActivator.CreateInstanceにのようなものがあると、生成されたJavaScriptコードでそれらの痕跡がないかどうかを知りたいと思います。したがって、C#のCreateInstance
のようなものはありません。
でも、c#と違って、typescriptのクラスは他のオブジェクトと同じように実行時に使うことができるので、実行時にクラスのインスタンスを作成するだけであれば簡単に行うことができますクラスにのみ適用され、一般的なタイプには適用されません)。
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()」は何を返しますか?オブジェクト、またはそのオブジェクトの文字列表現?オブジェクトを直接返すと、 'doTheMambo'で解決しようとしているオブジェクトと' T'の違いは何ですか? – hvd
response.jsonはjsonを返します。doTheMamboは2つのオブジェクト間の何らかの解析を行います。 – BasicSide
2つのオブジェクトに大きな違いがあります – BasicSide