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

Typescriptのis演算子

 TypeScriptにおける`is`演算子は、特定の型であるかどうかを判定し、その型の制約を持った変数を作成するために使用される、カスタムな型ガードを実現するための演算子です。型ガードは、プログラム内で特定の型を確認し、それに基づいてコードを安全に制御するための手段です。


カスタムな型ガードを定義する際に`is`演算子を使用する例を以下に示します。


```typescript

// カスタム型ガードの定義

function isString(value: unknown): value is string {

    return typeof value === "string";

}


function isNumber(value: unknown): value is number {

    return typeof value === "number";

}


// 使用例

function printValueType(value: unknown) {

    if (isString(value)) {

        console.log("Value is a string:", value.toUpperCase());

    } else if (isNumber(value)) {

        console.log("Value is a number:", value.toFixed(2));

    } else {

        console.log("Value has an unknown type");

    }

}


printValueType("hello"); // Value is a string: HELLO

printValueType(42);     // Value is a number: 42.00

printValueType(true);   // Value has an unknown type

```


この例では、`isString`と`isNumber`というカスタムな型ガード関数を定義しています。これらの関数は、それぞれ特定の型であるかどうかを判定し、`value is string`および`value is number`という形式の型ガードの条件を満たすかどうかを返します。その後、`printValueType`関数内でこれらの型ガードを使用して、`unknown`型の変数を安全に特定の型として扱っています。


`is`演算子を使用することで、型の制約を持った変数を作成し、型ガードを使って型の判定と安全な型アサーションを行うことができます。

コメント

このブログの人気の投稿

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...