| null과 undefined
undefined
undefined 는 두개가있다. 하나는 타입, 하나는 값이다
const un: undefined = undefined;
왼쪽이 타입, 오른쪽이 값이다
undefined는 최하위 계층이라 모든 타입의 특성을 다 갖고 있다
//1. null undefined 같은 값
const un: undefined = undefined;
//2. undefined 2개가 있다.
//3. 모든 타입의 최하위 계층
interface IMan{
name: string;
}
function printName(params: IMan){
console.log("printName on!");
console.log(params.name);
}
//printName({name: "jae"})
printName(undefined);
결과를 보면 파라미터의 타입이 다름에도 불구하고 함수가 실행되어 printName on! 이 출력되는 것을 볼수있다
함수는 정상적으로 실행이 잘되었고 그안에서 참조에러가 난것을 볼 수있다
undefined가 최하위 계층이라서 타입이 달라도 들어갈 수 있었던 것이다.
이는 실제로 서버를 구동하는데에 있어 큰 문제가 될 수 있다.
만약 위와 같은 결과가 안나온다면
tsconfig.json 에 compilerOptions에서 strictNullCheck가 true로 되어있는데 false로 바꾸면 undefined가 될 가능성이 있는 것들을 사전에 차단하지 않게된다. 기본값은 true이니 굳이 안바꿔도될것같다. 공부를 위해 잠시 false로 바꿔두자
그래서 아래와 같이 해주면 사전에 에러를 방지할 수 있다
function printName(params: IMan){
console.log("printName on!");
console.log(params?.name);
}
function printName(params: IMan){
console.log("printName on!");
console.log(params?.name ?? "default val");
}
반응형
'웹 개발 > #️⃣ TypeScript' 카테고리의 다른 글
TS | 클래스 - readonly와 생성자 (0) | 2023.06.01 |
---|---|
TS | 클래스 - 접근제한자와 getter setter (0) | 2023.06.01 |
TS | never (1) | 2023.05.30 |
TS | 함수 타입과 type (0) | 2023.05.30 |
TS | enum과 literal (0) | 2023.05.30 |