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

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

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

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

Q&A

解決済

1回答

500閲覧

TypeScriptの型について(type-challengesの問題で気になったこと)

sasa0330

総合スコア64

TypeScript

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

0グッド

1クリップ

投稿2023/01/08 07:09

編集2023/01/08 07:12

前提

type-challengesの
[easy] First of Array
の問題についての質問です。
https://github.com/type-challenges/type-challenges/blob/main/questions/00014-easy-first/README.md

問題内容

配列Tを受け取り、その最初のプロパティの型を返すFirst<T>を実装します。

TS

1type arr1 = ['a', 'b', 'c'] 2type arr2 = [3, 2, 1] 3 4type head1 = First<arr1> // expected to be 'a' 5type head2 = First<arr2> // expected to be 3

疑問点

上記の問題に関して、解答例を見ると以下のような回答内容でした。

TS(解答例)

1type First<T extends any[]> = T extends {length : 0} ? never : T[0]

これは以下のような状態と同じだと思います。これでも良いのでは?と思いました。

TS(これでも良いのでは?)

1type First2<T extends any[]> = T[0]

質問1
TS(解答例)の方は配列の内容がない時にnever型になるように考慮しているのだと思うのですが、必ず必要な分岐なのでしょうか。
TS(これでも良いのでは?)の型は、値がない場合はundefined型となりましたが、値がある場合は期待通りの型になりました。

質問2
もし質問1の分岐が必須だとすれば、「配列の値がないとき」かつ「何を返せば良いか定まらない時」はnever型を返しておけば良い。といった御作法的なものはあるのでしょうか。

初歩的な質問かとは思いますが、よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

必ず必要な分岐なのでしょうか。

First<[]>undefinedという誤った結果を返さないようにしたいなら必要です。

「配列の値がないとき」かつ「何を返せば良いか定まらない時」はnever型を返しておけば良い。といった御作法的なものはあるのでしょうか。

作法ではなく、neverは「空配列の要素型」、「必ず例外を投げて戻ってこない関数の返り値型」、「string & numberのような共通点のない型のインターセクション」など、「値が存在し得ない」という積極的な意味を持つ型です。

投稿2023/01/08 07:19

maisumakun

総合スコア145184

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

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

sasa0330

2023/01/08 07:27

neverの持つ意味をちゃんと理解していませんでした! >neverは「空配列の要素型」、「必ず例外を投げて戻ってこない関数の返り値型」、「string & numberのような共通点のない型のインターセクション」など、「値が存在し得ない」という積極的な意味を持つ型です。 undefinedではなくneverを返すのが適切ですね。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問