ABOUT ME

Today
Yesterday
Total
  • [TS] 배열과 튜플
    codeStates front-end/Typescript 2023. 3. 12. 20:49
    반응형

     

    목차

     

     

     

    📌  배열

     

    개별 자바스크립트 배열은 하나의 특정 타입의 값만 가진다.

    타입 스크립트는 초기 배열의 어떤 데이터 타입이 있는지 기억하고

    배열이 해당 데이터 타입에서만 작동하도록 제한한다.

     

    📍배열 타입

     

    변수에 타입 에너테이션을 제공해 배열이 포함해야하는 값의 타입을 알려주어야 한다.

     

    // 선언과 할당을 동시에
    let car:string[] = ['BMW','AUDI','BEN']
    
    // 선언과 할당을 분리
    let fruits: string[] = [];
    fruits.push("apple");
    fruits.push("banana");
    
    // 제네릭 사용
    let fruits:Array<number>= new Array<number>();
    fruits.push(1);
    fruits.push(2);

     

     

    배열과 함수 타입

     

    괄호는 어느 부분이 함수 반환 부분이고 어느 부분이 배열 타입 묶음인지를 나타내기 위해 사용

     

    // 타입은 string 배열을 반환하는 함수
    let createStrings : () => string[];
    
    // 타입은 각각의 string을 반환하는 함수 배열
    let stringCreators:(() => string)[];

     

    유니언 타입 배열

     

    배열의 각 요소가 여러 선택 타입 중 하나일 수 있음을 나타내려면 유니언 타입 사용

    유니언 타입 배열에서 괄호 사용은 매우 중요 !!!

     

    // 다음 두 코드는 동일하지 않다
    // 타입은 string 또는 number 의 배열
    let stringOrArrayOfNunbers : string | number[];
    
    // 타입은 각각 number 또는 string인 배열의 요소
    let stringOrArrayOfNunbers : (string | number)[];

     

    any 배열의 진화

     

    배열 또한 타입 에너테이션이 없다면 any[] 취급 

    빈 배열로 선언했어도 값에 맞게 타입은 진화한다.

     

    // 타입 : any[]
    let values = [];
    // 타입 : string[]
    values.push('');
    // 타입 : (number | string)[]
    values[0] = 0;

     

     

    다차원 배열

     

    2차원 배열 또는 배열의 배열은 두개의 []를 갖는다.

     

    let values : number[][];
    
    values = [
        [1,2,3],
        [4,5,6],
        [7,8,9],
    ]

     

     

    📍배열 멤버

     

    배열 요소의 타입은 배열의 타입을 따라간다.

     

    onst names = ["Ben", "Rock"];
    const firstName = names[0];
    // firstName의 타입은 string
    
    const nameNumber = ["Ben", 34];
    const firstName = nameNumber[0];
    // firstName의 타입은 number | string

     

    🔗  주의 사항 : 불안정한 멤버

     

    타입 스크립트도 완벽하지 않기 때문에, 배열의 길이를 넘는 값을 호출 했을 때, 타입 오류를 출력하지 않는

    오류가 있다.

     

    function el(elements: string[]) {
    	console.log(el[123].length); // 오류 없음
    }
    
    el(["123","1424"]);

     

    📍스프레드와 나머지 매게변수

     

    나머지 매게변수

     

     

    [TS] 함수

    HTML 삽입 미리보기할 수 없는 소스 📌 함수 📍함수 매개변수 타입 스크립트에서 함수는 자바스크립트처럼 생성할 수 있으나, 매개변수의 타입과 반환 타입을 설정해야 한다. // 타입을 선언하

    hwantech.tistory.com

     

    스프레드

     

    ... 스프레드 연산자를 사용해 배열을 결합

    기존 두 배열이 같은 타입이면 동일한 타입으로 출력 되고, 서로 다른 타입이면 유니언 타입으로 출력된다.

     

    const stringArr = ["abc", "dcd"];
    const ages = [12,34];
    const joinArray = [...stringArr, ...ages];
    // 타입: (string | number)[]

     

    나머지 매게변수 스프레드

     

    함수에서 매개변수로 …을 사용해서 임의 갯수의 매개변수를 받을 때, 한 가지 타입의 값을 가져야 한다.

     

    function logFunc(name: string, ...names: string[]) {
    	for (const name of names) {
    		console.log(`${name}, ${name}!`)
    	}
    }
    
    logFunc("Jiin", "Ben", "Been", "Bon");
    // OK
    
    logFunc("Jiin", 123, 423);
    // Error

     

     

    📍 튜플

     

    JS에서는 튜플이 없으면 단순히 배열의 한 종류로 취급된다.

    타입스크립트는 튜플의 타입 표기법을 배열과 다르게 선언 가능하다.

     

    튜플특징

    튜플 타입은 가변 길이의 배열 타입보다 더 구체적으로 처리

    튜플은 불변 구조이기 때문에 읽기 전용(readlonly)이다.

    as const를 기술하면 쉽게 값의 정의로부터도 튜플 타입을 가져올 수 있다.

     

    // 여러 타입에 대응하는 any 타입 배열을 선언한 예
    let tuple : any[] = [true, 'the result is ok']
    // any[] 타입은 타입 기능을 무력화 하므로 배열과 다른 튜플의 타입 표기법으로 선언 가능
    const array: number[] = [1, 2, 3, 4, 5];
    const tuple : [boolean, string] = [true,'the result is of']

     

    🔗  튜플 추론

     

    타입 스크립트는 생성된 배열을 튜플이 아닌 가변 길이의 배열로 취급

    튜플 타입임을 증명하려면 명시적 튜플 타입 또는 const 어시션을 사용하는 방법이 있다.

     

    // const 어시션을 사용한 예
    // $ExpectType readonly ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat']
    const days = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'] as const;

     

     

     

    반응형

    'codeStates front-end > Typescript' 카테고리의 다른 글

    [TS] 클래스  (0) 2023.03.20
    [TS] 인터페이스  (0) 2023.03.12
    [TS] 함수  (0) 2023.03.12
    [TS] 객체  (0) 2023.03.06
    [TS] 타입 시스템, 유니언과 리터럴  (0) 2023.03.06

    댓글

Designed by Tistory.