質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Generics

Genericsはパラメトリックなポリモーフィズムの形態であり、.NET やJavaなど、様々な言語に実装されています。C++のテンプレートと同等の機能を持ち合わせています。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

0回答

980閲覧

TypeScriptでGenericsのunion typeを使用して型定義したがエラーになる

teis

総合スコア10

Generics

Genericsはパラメトリックなポリモーフィズムの形態であり、.NET やJavaなど、様々な言語に実装されています。C++のテンプレートと同等の機能を持ち合わせています。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/04/22 11:20

編集2021/04/24 16:59

実装

typescript

1type SchoolGrades = English | Mathmatic | Art | Physical 2 3type Status = type TableStateType<T extends SchoolGrades> { 4 point: 'A' | 'B' | 'C' 5 average: number 6 something: T 7}

react

1type Props = { 2 point: 'A' | 'B' | 'C' 3 average: number 4 fn: (status: Status<English | Mathmatic>) => void 5} 6 7export const Report = ({point, average, fn}: Props) => { 8 const status = {} // something object 9 fn(status) 10 return ( 11 <> 12 <div>{ point }<div> 13 <div>{ average }<div> 14 </> 15 ) 16}

上記のコンポーネントを、以下のように使用するとtype errorになります。

react

1type Props = { 2 .... 3 setEnglishStatus: (status: Status<English>) => void 4} 5 6export const ReportCard = ({..., fn}: Props) => { 7 // something process 8 return ( 9 <> 10 {/* ...something component */} 11 <Report 12 point={'A'} 13 average={80} 14 fn={setEnglishStatus} // type error 15 /> 16 </> 17 ) 18}

エラー

Type 'Status<English | Mathmatic | Art | Physical>' is not assignable to type 'Status<English>'.

やりたいこと

Report コンポーネントのfnには、用途によって引数の型が違う関数を使いたいので、union typeを使用しているのですが、上記のようなエラーが出てしまいます。
このような状況の場合、どこを修正するべきなのか教えていただきたいです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/04/24 11:58

そもそも論として、Statusの型定義内でTが引数以外で使われておらず、Tに何を渡したとしても「同じ型」になるのですが、それは意図通りでしょうか?
teis

2021/04/24 17:00

Typeとエラー内容の修正をおこないました。 よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問