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.