TypeScriptの学習をしたいのでChatGTPに教えてもらうことにしました
見出し文以外、全てAIからの回答を基本的に無編集で貼り付けています、恐ろしい。
ChatGPTとは
ChatGPTは、自然言語処理を活用したチャットボット技術です。AIが人間の会話のような会話を行うことができるようになるため、会話を行うことができるチャットボットです。人間の会話を再現するため、自然言語処理を活用したニューラルネットワークを使用しています。TypeScriptとは
TypeScriptはMicrosoft社が開発したJSの拡張言語です。ECMAScriptの機能を拡張し、オブジェクト指向プログラミングの効率性を高めることを目的としています。
TypeScriptでは、変数の型を指定することができます。変数の型には、数値、文字列、配列、オブジェクトなどがあります。型を指定することで、プログラムの安全性が高まります。
また、TypeScriptはクラスベースの機能を持っています。
クラスを使用することで、コードの再利用性や可読性を向上させることができます。
さらに、モジュールを使用することができます。モジュールを使用することで、コードをより分かりやすく整理することが可能です。また、モジュールを使用することで、コードのテストやデバッグを容易に行うことができます。
TypeScriptには、プログラムの記述を容易にするためのインターフェースやジェネリックなどの便利な機能もあります。また、TypeScriptはNode.jsやブラウザで使用することが可能です。
以上のように、TypeScriptはプログラミングの効率性を高めるための機能を多数提供しています。
数値型
TypeScriptでは、変数の型を指定することができます。数値型の変数を宣言するときは、「number」型を使用します。例えば、数値の変数を宣言するときは、以下のように記述します。
let num: number = 10;
上記のコードでは、変数「num」を宣言し、型を「number」に指定して、値を「10」に設定しています。
また、TypeScriptでは、数値型の変数を更に細かく分類するために、「int」(整数)、「float」(浮動小数点数)、「bigint」(大きな整数)などの型を指定することも可能です。
文字列
let myString: string = "Hello World!";
配列
let numbers: number[] = [1, 2, 3];
オブジェクト
TypeScriptのオブジェクトは、プロパティとメソッドを持つ型定義されたデータ構造です。 例 以下の例では、「Person」という名前のオブジェクトが定義されています。interface Person {
name: string;
age: number;
address?: string;
greet(): void;
}
//実装
let person: Person = {
name: "John Doe",
age: 30,
greet() {
console.log(`Hello, I'm ${this.name} and I'm ${this.age}`);
}
};
person.greet(); // Hello, I'm John Doe and I'm 30
上記で出てきたvoidとは
関数の戻り値の型として使用されます。これは、関数が何も返さない場合を表します。 void型は、「何もない」型です。つまり、関数が何も返さない場合、void型を返す必要があります。また、関数の仮引数としてvoid型を指定すると、その関数に何も渡さなくても関数を実行することができます。リテラル型
TypeScriptのリテラル型は、基本データ型の値を表現するために使用されます。 リテラル型は、数値リテラル、文字列リテラル、真偽値リテラルなどがあります。例1:
// 数値リテラル
let age: 25;
例2:
// 文字列リテラル
let name: "John";
例3:
// 真偽値リテラル
let isMarried: true;
ユニオン型
ユニオン型は複数の型を1つの型として定義するための型です。下の例では、Animalという型を'cat' | 'dog' | 'bird'という型から構成されているユニオン型として定義しています。これを使って、getAnimalSound関数を定義しています。この関数の引数の型としてAnimalを指定しているため、引数には'cat'のような値を渡す必要があります。// ユニオン型を使った型定義
type Animal = 'cat' | 'dog' | 'bird';
// ユニオン型を使った関数定義
function getAnimalSound(animal: Animal): string {
switch (animal) {
case 'cat':
return 'meow';
case 'dog':
return 'woof';
case 'bird':
return 'tweet';
default:
return '...';
}
}
// ユニオン型を使った関数呼び出し
console.log(getAnimalSound('cat')); // 'meow'
型推論
TypeScriptの型推論は、TypeScriptコンパイラによって行われるプロセスです。以下のコードを見てみましょう。let name = "Jane";
TypeScriptは、この変数Nameの型を推論し、その後の呼び出し元に対してstring型として解決します。string型であることが明示的に宣言されていなくても、初期化子を基にして型推論を行うことができます。
型エイリアス
型エイリアスは、既存の型を新しい名前で再定義することです。下記のコードでは、既存の型であるstringをNameという新しい名前で再定義しました。そして、myName変数をName型として宣言しています。// 型エイリアス
type Name = string;
// 使用例
let myName: Name = "John";
console.log(myName); // John
関数の型定義
function add(x: number, y: number): number {
return x + y;
}
上記の関数の型定義は以下のようになります。
type addFunc = (x: number, y: number) => number;
ジェネリクス
下記のコードは、ジェネリクスを使用して汎用的な関数を定義しています。 ジェネリクスを使用することで、関数に型を渡して関数から型を受け取ることができます。 下記のコードでは、文字列を渡して文字列を受け取る場合と、数値を渡して数値を受け取る場合を実現しています。// 汎用的な関数を定義
function echo<T>(arg: T): T {
return arg;
}
// 文字列を渡して文字列を受け取る
let str: string = echo<string>("Hello, generics!");
// 数値を渡して数値を受け取る
let num: number = echo<number>(123);