본문 바로가기

패스트캠퍼스

타입스크립트 타입 2 [패스트캠퍼스 챌린지 15일차]

undefined & null

In TS, both undefined and null은 실제로 각각 undefined와 null이란 타입을 가짐

Much like void, they're not extremely useful on their own

둘 다 소문자만 씀 (타입도 소문자, 값도 소문자)

이 변수들에 할당할 수 있는 것들은 거의 없음

let u: undefined = undefined;
let n: null = null;

undefined&null are subtypes of all other types

→설정을 하지 않았을 때 얘기임 (설정 : tsconfig설정)

예) number에 null 또는 undefined를 할당할 수 있다는 의미

→근데 이렇게 사용하면 문제가 됨

그래서 컴파일 옵션의 --strictNullChecks를 사용하면서 컴파일을 하면,
그때는 null과 undefined는 void나 자기 자신에게만 할당할 수 있음
(다른 타입들의 하위타입으로 존재 X)
/*
void는 예외적인 아이. void는 undefined랑 비슷한 의미를 가짐
그래서 void에 undefined를 할당할 수 있음. null은 X
*/

→타입적으로 안전하고 정확하기 때문에 보통 위의 옵션을 키고 사용하기

예) number에 null을 입력하면 에러

만약에 number에 null과 undefined를 할당할 수 없다면 코딩하면서 힘들 거임. 왜냐하면 null과 undefined를 굉장히 많이 사용하니까.

그럴 때는 number에 null과 undefined가 함께 있는 표현을 해주기 위해서 union 타입을 활용

→ null과 undefined를 할당할 수 있게 하려면 union type을 이용해야 함

let union: string = null; //(X)
let union: string | null = null; //(O)
//union은 합집합 같은 녀석
union = "Mark";

union: string | null
이런 식으로 입력하면 문자열도 null도 값으로 쓸 수 있음

나중에 'union의 상태가 null이 아닐 때만 ~~ 하겠다'는 식으로 type으로 null 부분을 제외시킬 수 있는데, 이걸 타입 가드라고 부름

null in JS

null이라는 값으로 할당된 것을 null타입이라고 함

무언가 있는데 사용할 준비가 덜 된 상태

null이라는 타입은 null이라는 값만 가질 수 있음

runtime에서 typeof 연산자를 이용해보면 object라고 나옴

→왜 null이라고 안 나올까? JS가 그렇게 생겨먹은 거...(?)

let n: null = null;

console.log(n); //null
console.log(typeof n); // object

undefined in JS

값을 할당하지 않은 변수는 undefined라는 값을 가짐

무언가 아예 준비가 안된 상태]

변수를 선언만 하고 값을 안 준 상태도 undefined

object의 property가 없을 때도 undefined임

runtime에서 typeof 연산자를 이용해보면 undefined라고 나옴

let u: undefined = undefined;

console.log(u); // undefined
console.log(typeof u); // undefined 

JS에서의 object

직접 값을 가지지 않고 값을 가진 곳을 가리키는 정보를 담고 있음

TS에서는 좀 다름

//create by object literal
const person1 = { name: "Mark", age: 39};

//person1 is not "object" type
//person1 is "{name: string, age: number}" type

오브젝트 리터럴 타입

대문자 Object

내장 전역객체

runtime에 제공되는 준비된 재료

//create by Object.create
const person2 = Object.create({name: "Mark", age: 39});

object

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

non-primitive type

number, string, boolean, bigint, symbol, null or undefined


추석추석~
놀아도 놀아도 또 더 놀고싶고

https://bit.ly/37BpXiC
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
#직장인인강 #직장인자기계발 #패스트캠퍼스 #패스트캠퍼스후기 #패캠챌린지 #한번에끝내는프론트엔드개발초격차패키지Online