@cartantが示唆したように、overloadsをTypeScriptに使用することができる。彼らは単一の実装を持っていますが、複数の署名があります。ハンドブックでそれについて読むことができ、署名と実装をうまく組み合わせる方法を確認できます。あなたのケースでは、このような何かを行うことができます。
export class ConstantImpl<T> {
// guessing at your constructor
public constructor(public val: T) {
}
public static create(b: boolean): Constant<boolean>;
public static create(i: number): Constant<number>;
public static create(v: boolean | number): Constant<boolean | number> {
return new ConstantImpl(v);
}
}
はこれだけConstantImpl.create()
はboolean
かnumber
値を受け入れることができます、そして、それは他のすべてを拒否します。私はそれがboolean
かnumber
であるかどうかを確認するためにv
の種類を検査しなければならなかったことに注意してください、またコンストラクタが推測するので、私は、手動でConstantImpl<T>
をコンストラクタでT
の値を指定する必要がなかったですあなたが渡す引数からT
の値。
そして本当に、その場合には、それはあなたがboolean
とnumber
値を受け入れるだけにConstantImpl.create()
を制限するために気になぜ私は思ってしまいます。代わりに完全な一般的なルートを行ってみませんか?
// accept any type
public static create<T>(v: T): Constant<T> {
return new ConstantImpl(v);
}
がんばろう。
私はあなたがtypescriptでそのようなことをすることはできませんと思う、ソリューションは作成することができます(任意:)定数次にchecのタイプと特定の関数を呼び出す –
CharybdeBE
彼らは同じ名前を持っています。そのために、オーバーロードを使用することができます。 「オーバーロード」のセクションをご覧ください:https://www.typescriptlang.org/docs/handbook/functions.html – cartant
@CharybdeBEいくつかの例が答えを教えてくれますか? – Jordi