型付き配列を使用する以外に、TypeScript で型を別の型でパラメータ化する方法はありますか?
KnockoutJs では本当に必要です。
ジェネリックは検討中ですが、まだサポートされていません。仕様の内容は次のとおりです。
注:TypeScriptは現在ジェネリックスをサポートしていませんが、最終的な言語に含める予定です。TypeScriptの静的型システムには実行時の表現がないため、ジェネリックスは「型消去」に基づいており、インターフェイス、クラス、および関数の署名でパラメトリック型の関係を表現するための導管として純粋に意図されています。
セクション3の最後にあるTypeScript言語仕様から。
私はかなり汚い回避策を使用しています。any型の変数にクラスを割り当てることができます。このコードは有効です:
class A{}
var test:any=A;
var a=new test();
したがって、タイプanyの別のパラメーターを追加することにより、メソッドをパラメーター化できます。
function(param:any){
var test=new param();
test.someFunction();
}
もちろん、これは非常に悪いスタイルであり、おそらくお勧めできません。しかし、私にとっては、ジェネリックスが言語に含まれるまでの時間をカバーします。
TypeScript に Generics がある今、この質問に出くわした私のような人のために、Typescript Web サイトの Generics に関する公式ドキュメントへのリンクを含むもう少し情報があります。変更が行われると、使用例が示されます。
https://www.typescriptlang.org/docs/handbook/generics.html
ジェネリックを使用すると、単一のタイプではなく、さまざまなタイプで機能するコンポーネントを作成できます。
公式ドキュメントに示されているように、identity 関数は Generics が機能する最も基本的な例です。ID 関数は、渡されたものを返す関数です。
ジェネリック以前のオプションは次のとおりです。
// without Generics option 1 - explicitly define and get tied to a single type.
function identity(arg: number): number {
return arg;
}
// without Generics option 2 - use the 'any' type
// but lose type information on the incoming arg by the time we return it.
function identity(arg: any): any {
return arg;
}
ジェネリックとの連携方法は次のとおりです。
// with Generics - use a type variable T that works on types rather than values.
// Captures the type of incoming arg so we can use it again in the return type
function identity<T>(arg: T): T {
return arg;
}
// can call it with explicit setting of T to be a given type ('string' here)
let output = identity<string>("myString"); // type of output will be 'string'
// However can also call it without this explicit typing and the compiler will
// infer the type. Note this won't always work for more complex Generics usage
let output = identity("myString"); // type of output will be 'string'