[解決済み] ユニオン配列型にマッピングするには?
2023-05-09 13:42:07
質問
以下のような構造になっています。
interface Test1 {
number: number;
}
interface Test2 extends Test1 {
text: string;
}
let test: Test1[] | Test2[] = [];
test.map(obj => {}); // does not work
エラーが出ています。
型に呼び出し署名がない式は呼び出すことができません。タイプ '{ (this: [Test1, Test1, Test1, Test1, Test1], callbackfn: (this: void, value: Test1, index: nu...'は互換性のあるコールサインを持ちません。
どのようにしたら
map
をテスト変数の上に置くことができますか?
どのように解決するには?
4.2用に編集
map
は呼び出せるようになりましたが、期待通りに動作させるためには、まだ引数に明示的な型注釈が必要です(型パラメータは文脈的に型付けされません)。
let test: Test1[] | Test2[] = [];
test.map((obj: Test1 | Test2) => {});
この状況は、将来のバージョンで改善される可能性が高く、この回答はほとんど時代遅れになっています ( PR を使えば、パラメータの文脈型が正しく合成されます)
4.2以前のオリジナルの回答
問題は、ユニオン型の場合、関数であるメンバもユニオン型として型付けされるため、ユニオン型である
map
は
(<U>(callbackfn: (value: Test1, index: number, array: Test1[]) => U, thisArg?: any) => U[]) | (<U>(callbackfn: (value: Test2, index: number, array: Test2[]) => U)
これはtypescriptに関する限り、呼び出し可能ではありません。
の和集合の配列を宣言することもできます。
Test1
と
Test2
let test: (Test1 | Test2)[] = [];
test.map(obj => {});
または、呼び出し時にタイプアサーションを使用することもできます。
let test: Test1[] | Test2[] = [];
(test as Array<Test1|Test2>).map(o=> {});
関連
-
[解決済み] エラー 型に呼び出し署名がない式は呼び出せない
-
[解決済み] TypeScriptで Object.keys return string[].
-
[解決済み] Typescriptでインターフェースやクラスを使用する場合 [重複].
-
[解決済み] モジュールと名前空間 - Import vs Require Typescript
-
[解決済み] TypeScriptをminifiedコードにコンパイルすることは可能ですか?
-
[解決済み] tsconfigの "target "と "module "を理解する。
-
[解決済み] Angular2 canActivate() 非同期関数呼び出し
-
[解決済み] 型{ [key: string]: boolean; }は何を意味するのでしょうか?
-
[解決済み] TypeScriptで純粋な抽象クラスを拡張する場合と実装する場合
-
[解決済み] オプションのパラメータが提供されたかどうかを確認するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] TypeScriptで Object.keys return string[].
-
[解決済み] 文字列ユニオンから文字列配列へ
-
[解決済み] tsconfig.jsonのtargetは何のためにあるのですか?
-
[解決済み] Visual Studio コード自動インポート
-
[解決済み] TypeScript 2: 型付けされていない npm モジュールのためのカスタム型付け
-
[解決済み] typescript の module.exports
-
[解決済み] types/packageでインストールしたTypeScriptの型定義が正しくない場合に上書きする方法
-
[解決済み] TypeScriptの"=>"の意味とは?(ファットアロー)
-
[解決済み] TypeScriptで純粋な抽象クラスを拡張する場合と実装する場合
-
[解決済み] Angular2でのenumに基づく選択