[TS](3)基本:基本タイプ


前回ブログでタイプ宣言とタイプ推論を知りました
[TS](2)基礎:タイプ宣言とタイプ推定
ここでは、タイプを位置に書き込む基本的なタイプを学びましょう.
// 여기 들어갈 타입?
someVariable: ?????;

1.JavaScriptと同じタイプ


1)元のタイプ(番号、String、Boolean、Null、Undefind)

  • タイプ宣言:小文字(number、string、boolean、null、undefined)の使用
  • タイプ推論:変数(letキー、デフォルト値のパラメータなし)のみを宣言しない限り、指定した値のタイプが元のタイプである場合、タイプを宣言する必要はありません.
  • // 예시
    let unde: undefined;
    let e:null;
    const obj = {
        key: "hello", // 프로퍼티의 값의 타입으로 추론됨
    };
    const fun4 = (a=1, b:string)=> { // 기본 값이 있고 그 값이 원시 타입인 경우 타입 선언 생략 가능
        console.log(a)
        console.log(b)
    }
    fun4(2,"hello")

    2)オブジェクトタイプ(参照タイプ)

  • プロパティ
    -元のタイプではないすべてのタイプがオブジェクトタイプ(参照タイプ)であり、オブジェクト、配列、関数も対応します.
    -複数のタイプを使用してオブジェクトタイプを宣言できます.
  • タイプ宣言:カッコで宣言し、キーワード:typeペアでオブジェクト内部propertyのタイプを決定します.
    -各ペアはカンマ(,)ではなくセミコロン(;)区別する.
    -ネスト可能なオブジェクト.
  • タイプ推論:propertyのタイプごとに推論できる場合は、対象タイプの宣言自体を省略することができますが、明確な宣言が必要な場合は、すべてのタイプに記入する必要があります.
  • const objDeep = {
        key1: "sdfsdf",
        key2: {
            name: "kim",
            job: "developer",
        },
        isMale: true,
    };
    
    // 객체(타입 선언 필요함) : arr 대응하는 프로퍼티의 타입이 tuple(길이 고정, 각 인덱스의 타입 정해짐)이었으면 좋겠다. 이 때는 타입을 모두 선언해주어야 함.
    // 타입 선언을 하지 않으면 arr 프로퍼티의 타입이 유니온 타입(추후 설명)으로 결정됨(x)
    const typeNeeded: {
        key1: string;
        key2: {
            name: string;
            job: string;
        };
        arr: [number, boolean, string];
    } = {
        key1: "sdfsdf",
        key2: {
            name: "kim",
            job: "developer",
        },
        arr: [2, true, "hello"],
    };
    arrタイプがtuple(長さが固定され、インデックスタイプごとに固定された配列)である場合は、宣言する必要があります(後述)
  • タイプ宣言時のarr(tupleタイプ)
  • タイプが宣言されていない場合、arr(連合タイプ)
  • 2.タイプスクリプトに追加されたタイプ


    配列に関連するタイプは、最初はJavaScriptにオブジェクトタイプに含まれていましたが、タイプスクリプトでは他のタイプとして明示的に宣言できます.(もちろん、JavaScriptにコンパイルすると、オブジェクトタイプはははは)

    1)アレイタイプ(参照タイプ)

  • タイプフィーチャー
    -長さが固定されておらず、配列項目に入るタイプを決定します.
    -オブジェクトタイプと同様に、アレイタイプは複数のタイプで構成できます.
    -プロジェクトタイプには任意のタイプが含まれます.したがって、タイプ拡張ターミナルサービスは、より豊富な配置タイプを宣言できます.
  • タイプ宣言:「含まれるプロジェクトタイプ[]
  • // 배열 타입 선언하기(추론 없이)
    const arr1: string[] = ["Hello","Bye"]; // string으로만 이루어진 배열 타입
    const arr2: (string | number)[] = ["Hello",12]; // string이나 number 타입만 가능(union 타입 포함됨. 이후 다룰 것!)
    let arr3: string[];
  • タイプ推論:変数「時」(letキーワード、デフォルト値のパラメータなし)を宣言する以外は、指定した値のタイプが「配列タイプ」の場合、タイプを宣言する必要はありません.上の3つのコード配列とそれぞれ比較します.
  • const arr1 = ["Hello","Bye"]; // 사실 위처럼 타입 선언할 필요 없다. 아래 이미지 참고
    const arr2 = ["Hello", 12]; // string이나 number 타입 항목이 들어간 배열을 원한다면 
    // 여기도 마찬가지로 선언할 필요 없다. 아래 이미지 참고
    let arr2: string[]; // 변수 선언만 할 때는 타입 선언을 해줘야 함

    2)tupleタイプ:固定長の配列

  • タイプフィーチャー
    -各インデックスには、配列内のアイテムのタイプがあり、配列の長さが固定されています.
    -tupleタイプは、複数のタイプから構成できます.
  • タイプ宣言:[タイプ、タイプ、タイプ、...]
  • // Good
    const arr4: [number, string, () => number] = [
        12,
        "Hi",
        () => {
            return 3;
        },
    ]; // 배열의 길이가 3이고, 배열 내 항목의 타입이 인덱스 순서대로 number, string, number를 return하는 함수(이후 설명 예정)
  • タイプ推論(ほとんど不可能):指定値によるタイプ推論は、Unionタイプであり、一般的に明確な宣言が必要である.
  • // 위 코드에서 타입 선언을 제외하면 그저 number 혹은 string 혹은 function 타입을 가지는 유니온 타입의 배열이 되어버린다.
    // Bad
    const arr4 = [
        12,
        "Hi",
        () => {
            return 3;
        },
    ]; 
    // 아래 이미지 참고!

    注意
  • !!:例外として、長さが固定されていない->長さに影響を与えるJavaScript配列構築方法(push、popなど)があります.
    この方法を使わなくても良いのですが、それを阻止するにはもっと複雑なタイプ宣言が必要です.
    私はまだ初心者ですから、また聞きましょう.ううう
    [Stackoverflow]tuple法に適用する問題について
  • 3)anyタイプ:タイプチェックをしないタイプ


  • タイプフィーチャー
    -エッジjavascriptのように使用できます.適切に使用しないと、タイプスクリプトの使用の意味が希釈される可能性があります.
    -すべてのタイプを割り当てることができます.
    -タイプチェックが必要なすべてのプロセスを実行します.一般的にunknownタイプを使いましょう

  • タイプ宣言:any
  • let anyType: any; // any 타입
    let b: any[] = [] // any[] 타입
    console.log(anyType.push("Hello")); // 컴파일 에러가 발생하지 않음. 런타임 에러 예상됨..
  • 型推定:変数を宣言するときに値(letキーワードやデフォルト値のないパラメータなど)が指定されていない場合は、任意のタイプと推定されます.
  • let a; // any 타입 추론
    // 'a' 변수는 암시적으로 'any' 형식이지만, 사용량에서 더 나은 형식을 유추할 수 있습니다.
    let b = [] // any[] 타입 추론

    4)不明なタイプ:任意のタイプを許可しますが、タイプをチェックします。

  • タイプフィーチャー
    -anyと似ていますが、タイプチェックが必要です.つまり,どのタイプでも割り当てることができるが,割り当てる変数を用いる場合には,タイプチェックを行う義務がある.

    -すべてのタイプの一番上にあります.任意のタイプを含める

    -タイプ宣言:unknown
    -タイプ推論:いいえ
    -タイプチェックの例:次の
  • を参照してください.
    let unknownType: unknown;
    unknownType = 12;
    let unknownArray: unknown = ["dfd"];
    console.log(unknownType.push("Hello")); // 에러 발생
    let unknownType: unknown;
    unknownType = 12;
    let unknownArray: unknown = ["dfd"];
    if (Array.isArray(unknownType)) {
        console.log(unknownType.push("Hello")); // 에러 없음!
    }

    5)unionタイプ:特定のタイプのみを許可する場合


  • タイプフィーチャー:2つ以上のタイプを割り当てることができます.orと理解するのは便利です.

  • タイプ宣言:タイプ|タイプ|タイプ...
  • let stringOrNumber: string | number; 
  • タイプ推論:割り当てられた値が複数のタイプのアイテムを持つ配列または論理演算子(|)からなる式である場合、推論を行うことができます.
  • let c = "sdf" || 12 // c: string | number 추론
    c = true // 'boolean' 형식은 'string | number' 형식에 할당할 수 없습니다.
    const arr5 = [12, "sdf"] // arr5: (number | string)[] 추론 <- 위에서 많이 봤죠?

    6)(文字列)文字タイプ:独自の定数を許可したい場合のみ


  • タイプフィーチャー
    -文字列テキスト自体をタイプとして指定し、変数がそのタイプの値のみを持つユニークなタイプを制限します.
    -通常はunionタイプとともに使用され、特定の定数のみを許可したい場合に宣言されます.

  • タイプ宣言:文字列ワイルドカード
  • let d: "frontend"| "backend";
    d = "I love you" // '"I love you"' 형식은 '"frontend" | "backend"' 형식에 할당할 수 없습니다.
  • 型推論:不可
    IDE(マイvscode)サポート:(ダブル/ダブル)引用符入力

  • 7)enumタイプ:同類列挙型定数に可読性を持たせる

  • タイプフィーチャー
    -同じ「タイプ」を表す複数の数値または文字列を処理し、各数値または文字列に適切な名前を付けてコードの可読性を向上させる必要がある場合はenumを使用します.(実はenumタイプが一番気まずいと思います…)
    -オブジェクトタイプですが、初期化後はオブジェクト内のプロパティを変更できません.
    -Propertyは、必要に応じて初期化および変更できる数値列挙型(0から)として自動的に決定されます.
    -tree-shing(未使用のコードを削除)は使用できないので、使用は推奨されません.次のリンクを参照してください.
    他の人がアップロードした良い文章がもっと詳しく説明されています.
    なぜTypeScript enumを使うのか
    n/a.理論
    Handbook - Enums - TypeScript
    Enumとtree-記事
    TypeScriptEnumを使わないのは良い理由です。
  • 型宣言:enum型名{EXAMPLE,HI,...}(慣習的に大文字として宣言)
  • // 숫자 열거형 : 초기화 안함(기본 0부터)
    enum WebDeveloper {
        FRONTEND,
        BACKEND,
    }
    console.log(WebDeveloper.FRONTEND) // 0
    console.log(WebDeveloper.BACKEND) // 1
    
    // 숫자 열거형 : 초기화 (초기화한 다음 인덱스부터 차례로 1씩 증가. 전 인덱스에는 영향 없음)
    enum Browser {
        CHROME,
        SAFARI,
        WHALE = 10,
        BRAVE,
    }
    console.log(Browser.CHROME) // 0
    console.log(Browser.SAFARI) // 1
    console.log(Browser.WHALE) // 10
    console.log(Browser.BRAVE) // 11
    
    // 문자열 열거형 : 초기화 (문자열 초기화된 이후 항목들은 초기화해야 함). 유의미한 정보 전달
    enum Browser {
        CHROME = "ch",
        SAFARI = "sa",
        WHALE = "wh",
        BRAVE = "br",
    }
    console.log(Browser.CHROME) // "ch"
    console.log(Browser.SAFARI) // "sa"
    console.log(Browser.WHALE) // "wh"
    console.log(Browser.BRAVE) // "br"
    
    // 이종 열거형 : 여러 개의 타입으로 초기화(굳이 사용할 필요 없음)
    enum Browser {
        CHROME = "ch",
        SAFARI = 10,
        WHALE,
        BRAVE ,
    }
    console.log(Browser.CHROME); // "ch"
    console.log(Browser.SAFARI); // 10
    console.log(Browser.WHALE); // 11
    console.log(Browser.BRAVE); // 12
  • 型推論:
  • 不可

    8)(関数のreturn)voidタイプ:関数が返されません

  • タイプフィーチャー
    -関数の戻り値を宣言するタイプの1つです.
    -関数が返されない(文が返されていない)場合、返される値のタイプがvoidとして宣言されます.
    -voidタイプ関数の戻り値が出力された場合、undefinedが出力されます.(void > undefined, null)
    -変数に宣言することもできますが、nullまたはundefinedのみが割り当てられるため、voidタイプはあまり役に立ちません.
    -undefinedとは異なります:return文があります(関数ではあまり使用されません)
  • // 함수의 return값 타입을 undefined로 하려면
    const undefinedFunc = (): undefined => {
    	return;
    }
  • タイプ宣言:void
  • // void
    const voidFunc = (): void => {
        console.log("Hello");
    };
    console.log(voidFunc) // undefined
  • タイプ推定:関数宣言時に関数の戻り文がない場合、voidタイプと推定されます.上のコードから「:void」を削除しても、うまく推論できます.
  • // void
    const voidFunc = () => {
        console.log("Hello");
    };
    console.log(voidFunc) // undefined

    9)(関数の戻り)neverタイプ:絶対に発生しない値のタイプ

  • タイプフィーチャー
    -関数の戻り値を宣言するタイプの1つです.
    -すべてのタイプに割り当てることができます.つまり最悪のタイプ!

    -絶対に発生しない値タイプの場合は、非タイプとして宣言します.
    -絶対に起こらない値とは?講義によれば、関数実行時にスクリプトがキャンセル/押し出し/破棄されます(エラー、無限ループなど).
  • タイプ宣言:never
  • // never
    const neverFunc = (): never => {
        throw { message: "에러입니다", errorCode: 500 }; // error 발생
    };
    const infiniteFunc = (): never => {
        while (true) {} // 무한 루프
    };
    const returnErrorFunc = (): never => {
        return neverFunc(); // never값을 return하는 함수
    };
  • タイプ推定:絶対に発生しない値、またはneverタイプを返す場合、タイプを推定します.上のコードのreturnタイプ宣言は実は必要ありません!
  • // never 타입 추론
    const neverFunc = () => {
        throw { message: "에러입니다", errorCode: 500 };
    };
    const infiniteFunc = () => {
        while (true) {}
    };
    const returnErrorFunc = () => {
        return neverFunc();
    };



    10)関数タイプ:関数の形状を決定する

  • タイプフィーチャー
    -関数自体をタイプと見なすことができます.
    -関数内部のシェイプ(パラメータの数とタイプ、戻り値のタイプ)を宣言します.
  • タイプ宣言:(パラメータ:タイプ、パラメータ:パラメータ、...)=>タイプ
  • let getFunc: () => number; 
    // 매개변수는 없고, return 값이 number 타입인 함수 타입
    let getFunc2: (a: number, b: number) => string; 
    // 2개의 number 타입 매개변수를 가지고, return 값이 string 타입인 함수 타입
  • タイプ推論(関数宣言時):パラメータ(有、無、個数、タイプ)は推定できません.returnタイプは、コードコンテキストに基づいて推定できます.
  • let funcType2 = (a: number, b: string) => {
        return a.toString() + b;
    }; 
    // return 타입은 선언하지 않았으나 return 값이 string인 것이 명확하므로 string 타입으로 추론된다.

    3.次の勉強


    TypeScript Compilerについて...