using System;
var factory = new Factory();
factory.LogType<Car>(); // Car
class Car
{
string color = "red";
}
public class Factory
{
public void LogType<T>() {
Console.WriteLine(typeof(T).Name);
}
}
TypeScriptによる型はコンパイル時にはすべて取り除かれるため、実行時には利用できない。(typeofで型は取り出せない。)そのためメソッドの引数から推論させ、それを利用する
class Car { color = "red"; } class Factory { logType<T>(type: (new () => T)): void { console.log(JSON.stringify(new type())) } } let factory = new Factory(); factory.logType(Car); // "{"color":"red"}"
TypeScriptは構造的型付けなので、型は構造で表現される。いわゆるダックタイピング
構造的型付けは、一見して直感には反するかもしれない。例えば以下のコードはエラーにならない。CarクラスはEmptyクラスのプロパティをすべて持っているとみなされるため
class Empty {} class Car { color = 'red'; } let empty: Empty = {}; empty = new Car()