남과 같이 해선 남 이상이 될 수 없다.

TypeScript

2021/06/11 타입스크립트

맨동 2021. 6. 11. 13:30
728x90

 object 타입

"primitive type이 아닌 것"을 나타내고 싶을 때 사용하는 타입

 

array

let list: number[] = [1,2,3];
let list2: (number | string)[] = [1,2,3,"4"];
// let list: Array<number> = [1,2,3]; 

 

tuple

length 를 벗어나거나 순서가 맞지 않아도 오류가 납니다.

let x: [string,number];

x = ["hello", 39];

//x = [10, "Hi"]; //순서가 맞지 않음

const person : [string, number] = ["Dongit", 25];

//const [first, second, third] = person; 
//length를 벗어남

 

any

어떤타입이어도 상관없는 타입입니다.

이걸 최대한 쓰지 않는게 핵심입니다.(컴파일 타임에 타입 체크가 정상적으로 이뤄지지 않기 때문입니다.)

컴파일 옵션중에 any를 써야 하는데 쓰지 않으면 오류를 뱉도록 하는 nolmplictAny 옵션이 있습니다.

function returnAny(message: any): any {
  console.log(message);
}

const any1 = returnAny("Anything");
any1.toString();

let looslyTyped: any = {};
const d = looslyTyped.a.b.c.d;

function leakingAny(obj:any) {
  const a = obj.num;
  const b = a + 1;
  return b;
}

const c = leakingAny({ num: 0})
// c도 any
c.indexOf(0);
//indexOf 속성이 없어야 하는데도 오류가 나지 않음.

 

any타입의 전파를 막기위해 타입을 지정해주어야 합니다.

//any타입의 전파를 막기위해 타입지정

function leakingAny(obj:any) {
  const a:number = obj.num;
  const b = a + 1;
  return b;
}

const c = leakingAny({ num: 0})
// c가 number 가 됨.
c.indexOf(0);
//number형식에는 indexOf 속성이 없으므로, 오류 발생

 

unknown

TypeScript 3.0 버전 부터 지원합니다.

any와 같이 아무거나 할당할 수 있습니다.

컴파일러가 타입을 추론할 수 있게끔 타입의 유형을 좁히거나

타입을 확정해주지 않으면 다른곳에 할당할 수 없고, 사용할 수 없습니다.

그렇기 때문에 any 대신 unknown 을 써야 runtime error를 줄일 수 있습니다.

declare const maybe: unknown;

const aNumber: number = maybe;

if (maybe === true ) {
  const aBoolean: boolean = maybe; //maybe가 boolean 데이터인 true가 됨.

  //const aString: string = maybe; 
  //error
}

if(typeof maybe === 'string') {
  const aString:string = maybe; //string이 됨.
}

 

never

never 타입은 모든 타입의 subtype 이며, 모든 타입에 할당 할 수 있습니다.

하지만, never 에는 어떤 것도 할당할 수 없습니다.

any 조차도 never 에게 할당할 수 없습니다.

잘못된 타입을 넣는 실수를 막고자 할 때 사용하기도 합니다.

function error(message:string): never {
  throw new Error(message);
  //throw: never
}

function fail() {
  return error('failed'); //never
}

function infiniteLoop(): never {
  while(true){
    //무한루프 : never 
  }
}

let a:string = "hello";

if(typeof a !== 'string') {
  a; // string-string=never
}

declare const b:string|number;

if(typeof b !== 'string') {
  b; // string|number - string= number
}

 

Void

void는 타입이 전혀 없다는 것에서 any의 반대 의미와 비슷합니다.

일반적으로 값을 반환하지 않는 함수의 반환 유형으로 이 타입을 사용합니다.

 

function returnVoid(message:string):void {
  console.log(message);
  return;
}

returnVoid('No return'); //void
728x90

'TypeScript' 카테고리의 다른 글

2021/06/21 TypeScript  (0) 2021.06.21
2021/06/19 TypeScript  (0) 2021.06.19
2021/06/17 TypeScript  (0) 2021.06.17
2021/06/15 타입스크립트  (0) 2021.06.15
2021/06/10 타입스크립트  (0) 2021.06.10