スキップしてメイン コンテンツに移動

TypeScriptのneverとvoid型の違い

 TypeScriptにおける`never`型と`void`型は、どちらも特殊な型ですが、異なる用途と意味を持っています。


1. **void型** (`void`):

   `void`型は、関数が値を返さないことを示すために使用されます。つまり、関数が何らかの結果を返さない場合、その戻り値の型は`void`です。一般的に、関数内で`return`文を使用して値を返さない場合に`void`型が利用されます。


   ```typescript

   function showMessage(): void {

       console.log("Hello, world!");

   }


   const result: void = showMessage(); // showMessage関数が値を返さないため、resultの型はvoid

   ```


2. **never型** (`never`):

   `never`型は、絶対に値を持たない型です。これは、例外をスローしたり、無限ループに陥ったりするなど、実行が完全に終了しない場合に使用されます。また、他の型のサブタイプとしても機能するため、どの型とも互換性がありません。


   ```typescript

   function throwError(message: string): never {

       throw new Error(message);

   }


   function infiniteLoop(): never {

       while (true) {

           // ここに何か処理を記述すると、関数が終了しない

       }

   }


   const neverValue: never = throwError("An error occurred"); // throwErrorは戻り値を持たないため、never型

   ```


要するに、`void`型は関数が値を返さないことを示すための型であり、`never`型は値を持たない型であり、通常は異常終了や無限ループなどの状況で使用されます。例外が投げられたり、無限ループに陥ったりする場合、関数は正常に終了しないため、その戻り値の型は`never`となります。

コメント

このブログの人気の投稿

Typescriptのevery

 TypeScriptにおける`every`は、配列のすべての要素が特定の条件を満たすかどうかを判定するためのメソッドです。このメソッドは、与えられた条件関数を配列のすべての要素に適用し、すべての要素が条件を満たす場合に`true`を返し、1つでも条件を満たさない要素がある場合には`false`を返します。 以下は、`every`メソッドの基本的な使い方と例を示したコードです。 ```typescript const numbers = [2, 4, 6, 8, 10]; const allEven = numbers.every(number => number % 2 === 0); console.log(allEven); // true const allGreaterThanFive = numbers.every(number => number > 5); console.log(allGreaterThanFive); // false ``` この例では、`every`メソッドを使用して配列の要素が特定の条件を満たすかどうかを判定しています。最初の例では、すべての要素が偶数であるため、`allEven`は`true`になります。2番目の例では、要素のうち5より大きいものは存在するものの、すべての要素が5より大きいわけではないため、`allGreaterThanFive`は`false`になります。 `every`メソッドは、特定の条件がすべての要素に対して成り立つかどうかを判定する際に便利です。ただし、1つでも条件を満たさない要素が存在する場合にはすぐに`false`が返されるため、その挙動に注意が必要です。

PHP7.4の新機能

PHP7.4にバージョンアップされましたので、新機能をまとめて 紹介します。 ■新機能 1)型付きプロパティ  <?php class User {     public int $id;     public string $name; }  ?> 2)アロー関数 暗黙的な値スコープを持った関数を定義する簡便な文法を提供します。 <?php $factor = 10; $nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]); ?> 3)返り値の型を狭めたり、引数の型を広げたりする  <?php class A {} class B extends A {} class Producer {     public function method(): A {} } class ChildProducer extends Producer {     public function method(): B {} } ?> 4)Null 合体代入演算子 「??」 <?php $array['key'] ??= computeDefault(); // 上記は、以下にほぼ等しい if (!isset($array['key'])) {     $array['key'] = computeDefault(); } ?> 5)配列内での値のアンパック <?php $parts = ['apple', 'pear']; $fruits = ['banana', 'orange', ...$parts, 'watermelon']; // ['banana', 'orange', 'apple', 'pear', 'watermelon']; ?> 6)数値リテラルのセパレータ 数値リテラルは、桁と桁の間にアンダースコアを挿入できるようになりました。 <?php 6.674_083e-11; // float 299_792_458...