抽象クラスで抽象メソッドを記述することはできません。number
またはstring
をとり、数値または文字列を返すことはできません。 私は|
シンボルを使用して、メソッドに引数があり、戻り値の型が文字列ごとに異なることを伝えています。
次に、抽象クラスa
から拡張され、引数をオーバーライドしようとする2つのクラスb
とc
を作成します。
次に、変数x
を宣言していますが、どのタイプがb
クラスまたはc
クラスに似ている可能性があります。ランダムステートメントに応じてこれらのクラスのインスタンスを作成しています。
最後に私はtest()
メソッドを呼び出そうとしていますが、TSコンパイラは私に以下のエラーを与えています。ここでメソッドの引数と戻り値の型はtypescriptでオーバーライドされます
abstract class a {
abstract test(x: string | number): string | number;
}
class b extends a {
test(x: number): number {
return x;
}
}
class c extends a {
test(x: string): string {
return x;
}
}
let x: b | c;
if (Math.random() > 0.5) {
x = new b()
} else {
x = new c()
};
x.test(1)
はTSコンパイラからのエラーです:
おそらく、私が間違ってaproachまたはIを使用しているのであれば、TSのマニュアルを誤解 - あなたが私の目標のより良い方法を私に指摘してください可能性。
貧しいクラス名と任意の「いじくる」の不在のため 申し訳ありません - 私はTSのコンパイラエラーを強調任意のJSの遊び場を探すWebサイトcoudn'tので、私はあなたがその後、B、Cのいずれかとのxを宣言している公式のTS Playground
ありがとうございます。 毎回メソッドコールをタイプガードする必要があるか、または「一回限りの使用」ソリューションがあるかどうかを教えてください。 – eko24ive
あなたが達成しようとしていることについてもっと知ることなく、正確に答えるのは少し難しいですが、試してみることができる例で私の答えを編集しました。 – hagner