Notice
Recent Posts
Recent Comments
Link
250x250
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 이미지반응형
- node설치
- 단어단위로떨어지기
- fontawesome
- 정적객체
- XEIcon
- 그누보드반응형
- owlcarousel
- vscode git clone
- googleicon
- 글자들여쓰기
- maxwidth
- npm install 문제
- slickslider
- package.json
- 동적객체
- Git clone
- 플러그인
- window 정책변경
- npm start
- minwidth
- node 오류
- npm install
- 의존성문제
- legacy-peer
- 아이콘사용법
- 웹아이콘
- git lab clone
- react npm install
- MediaQuery
Archives
- Today
- Total
어쩌다 알게 된 ƪ(•̃͡•̃͡ ƪ
🔵 [React/TypeScript] 타입 호환성 본문
728x90
타입 호환성
=> 넘버 타입은 넘버 리터럴 타입을 포함하고 있는 상위 집합
=> 넘버 타입에 넘버 리터럴 타입을 넣는 것은 가능하지만 반대는 불가능
let num1: number = 10;
let num2: 10 = 10;
// 코끼리에 개미를 넣는다
// 가능 (업캐스팅: 모든 상황에 가능)
num1 = num2;
// 개미에 코끼리는 못넣어!
// 불가능 (다운캐스팅: any만 가능하고 다른애들은 다 불가능)
num2 = num1;
(가능)업캐스팅: 하위 집합을 상위 집합에 넣는다.
(불가능)다운 캐스팅: 상위 집합을 하위 집합에 넣는다. => 예외: any는 가능

// 업 캐스팅 & 다운 캐스팅
// unknown 타입 (최상위 집합)
// 업 캐스팅으로 모두 가능
let a: unknown = 1;
let b: unknown = "hello";
let c: unknown = true;
let d: unknown = null;
let e: unknown = undefined;
let unknownVar: unknown;
// 다운 캐스팅 불가능
// let num: number = unknownVar;
// let num: string = unknownVar;
// let num: boolean = unknownVar;
function neverExam(){
function neverFunc(): never {
while(true){}
}
let num: number = neverFunc();
let str: string = neverFunc();
let bool: boolean = neverFunc();
// 불가
// let never1: never = 10;
// let never2: never = "string";
// let never3: never = true;
// void
function voidExam(){
function voidFunc(): void{
console.log('void');
}
let voidVar: void = undefined;
}
}
// any
function anyExam(){
let unknownVar : unknown;
let anyVar: any;
let undefinedVar: undefined;
let neverVar: never;
// 다운캐스팅 가능 (never 타입 빼고)
// any 타입은 다운캐스팅 업캐스팅 모두 가능한 치트키 타입이기 때문
anyVar = unknownVar;
undefinedVar = anyVar;
// never 타입은 any타입도 다운캐스팅을 할 수 없음
// neverVar = anyVar;
}
// 기본 타입간 호환성
let num1: number = 10;
let num2: 10 = 10;
num1 = num2;
// 상위 (더 적게 가지고 있는게 상위)
type Animal = {
name: string;
color: string;
};
// 하위
type Dog = {
name: string;
color: string;
breed: string;
};
let animal: Animal = {
name: "기린",
color: "yellow"
}
let dog: Dog = {
name: "돌돌이",
color: "brown",
breed: "진도"
}
animal = dog;
// 다운캐스팅이기 때문에 불가
// breed라고 하는 요소를 animal이 갖고 있지 않기 때문
// dog = animal;
type Book = {
name: string;
price: number;
};
type ProgrammingBook = {
name: string;
price: number;
skill: string;
}
let book: Book;
let programmingBook: ProgrammingBook = {
name: "리액트 기초",
price: 24000,
skill: "리액트"
}
// 초과 프로퍼티 검사를 회피할 수 있음
book = programmingBook;
// programmingBook = book;
// 초과 프로퍼티 검사가 발동해서 에러가 발생
// let book2: Book = {
// name: "리액트 기초",
// price: 24000,
// skill: "reactjs" // Book에 없는 객체이기 때문에 에러
// };
function func(book: Book){}
func(book);
// 초과 프로퍼티 검사를 회피 (하위 집합을 넣었기 때문)
func(programmingBook);
// 초과 프로퍼티 검사 발생하여 에러
// func({
// name: "리액트 기초",
// price: 24000,
// skill: "reactjs" // Book에 없는 객체이기 때문에 에러
// });728x90
'개발 > 🔵 React-TypeScript' 카테고리의 다른 글
| 🔵 [React/TypeScript] 타입 추론, 타입 단언 (0) | 2025.04.04 |
|---|---|
| 🔵 [React/TypeScript] 대수타입 (0) | 2025.04.02 |
| 🔵 [React/TypeScript] 타입 별 예제 2 (0) | 2025.03.30 |
| 🔵 [React/TypeScript] 타입 별 예제 1 (0) | 2025.03.30 |
| 🔵 [React] TypeScript (1) | 2025.03.16 |
Comments
