티스토리 뷰
1) Readonly(읽기전용) 속성
클래스, 인터페이스 등 오브젝트로 구현된 컴포넌트의 (property) 속성을 "읽기 전용"으로 선언하는 제어자.
타입스크립트에서 **readonly**는 클래스의 속성이나 변수가 한 번 초기화되면 변경되지 않아야 함을 나타내는 접근 제한자이다.
readonly로 생성된 속성은 생성과 초기화를 동시에 해줄 필요는 없다. 하지만 첫 번째 초기화 이후엔 값을 변경할 수 없다.
type Name = string;
type Age = number;
type Student = {
readonly name : Name,
age? : Age
}
function jsArrowFunc = (name:string) : Student => ({name})
const jun = Student("jun")
jun.age = 12
jun.name = "star" //에러 error
👉 name 속성은 readonly이기 때문에 값을 변경할 수 없다.
const names : readonly string[] = ["1","2"]
names.push(4); // 에러 error
👉 readonly 배열은 변경할 수 없는 배열이다:
자바스크립트에서 readonly는?
자바스크립트에서는 readonly를 사용하지 않는다. JS에서는 그냥 array일 뿐임!
2) Tuple : 정해진 개수와 순서에 따라 배열 선언
배열에서 각 위치에 따른 값의 타입을 지정해줄 수 있다.
TS 문법
const student : readonly [string,number,boolean] = ["star",1,true]
👆이렇게 사용하면 항상 정해진 갯수의 요소를 가져야 하는 배열을 지정할 수 있다. 그리고 배열 값은 우리가 원하는 순서에 맞는 타입을 가져야 한다. (readonly도 사용 가능)
JS문법
const student = ["star", 1 ,true];
student[0] = "hi";
👆위 타입스크립트로 작성한 코드가 자바스크립에서는 이렇게 보인다. readonly나 Tuple이 없음!
API가 객체(object)를 주지 않을 수도 있고, 가끔! API가 ["star",1,true]이런 배열을 줄 수도 있다.
그럴 땐 배열로 들어오는게 무엇인지 문서를 보고 확인해야 한다. 그럼 적어도 [string,number,boolean] 이런식으로 타입을 지정하는데 도움이 된다고 한다.
3) any (모든 타입 허용) 권장X
any는 타입스크립트에서 벗어나고 싶을 때 사용하는데 any는 말그대로 아무거나 타입으로 올 수 있다는 뜻이다. 이 말은 TS의 장점인 타입 안전성이 없다는 것을 뜻한다.
즉, any는 TS의 모든 보호장치를 비활성 시킨다고 보면 된다.
const a : any[] = [1,2,3,4]
const b : any = true
a + b
any는 사용하지 않는 것을 권장하는데 가끔은 써야할 때가 생길 수도 있는데 그럴 때 any를 안전하게 사용해야한다.
const a : any[] = [1,2,3,4]
const b = true
a + b //error
any를 사용하는 방법이 잘 나와있는 블로그:
https://velog.io/@gene028/Typescript-any를-현명하게-사용하자
Type Checker와 소통하기
타입스크립트의 중요포인트는 '타입체커'와 소통하는 것이다.
1) unknown
만약 API로 부터 응답을 받는데 그 응답의 타입을 모른다면 unknown 타입을 사용할 수 있다.
unknown타입은 모든 값을 나타내고 이것은 any타입과 비슷하지만 any보다 unknown이 더 안전하다.
변수의 타입을 미리 알지 못할때 사용할때마다 변수타입 지정을 요구한다.
let a:unknown;
let b = a + 1 //오류, a : Object is of type 'unknown'
//타입 검사
if(typeof a === 'number'){ //if문 범위 안에서 a는 number타입이라 오류없음
let b = a + 1
}
a.toUpperCase(); // 동작 X (a의 타입을 알지 못함)
if(typeof a === 'string'){ //if문 범위 안에서 a는 string타입으로 지정해서 동작함.
let b = a.toUpperCase();
}
What do we have to do before using a variable of type unknown?
알 수 없는 유형 변수를 사용하기 전에 무엇을 해야 하나요? ⇒ We have to first check with typeof
먼저 다음 유형을 체크해야한다.
2) void
평소대로 함수를 선언하거나 변수를 만들면 유효한 값의 타입이라고 알려준다.
void는 아무것도 return하지 않는 함수이다.(아무것도 없다는 뜻) + 따로 지정할 필요 없다.
function hello(){ //function helllo() : void
console.log('x')
}
const a = hello();
a.toUpperCase(); //오류: void타입엔 toUpperCase가 없어서 아무것도 리턴하지 않는다.
3) never
많이 사용하진 않지만 무엇인지 알아보자. never는 함수가 절대 return하지 않을 때 발생한다.
예를 들어 함수에서 exception(예외)가 발생할 때
function hello():never {
throw new Error("zzz"). //에러가 없음
}
function temp(name:string | number):never {
if(typeof name === "string"){
name
} else if(typeof name === "number"){ //두 타입(string,number) 모두 확인
name
} else {
name //이 부분은 never가 될 것임. 절대 실행되지 않아야 한다는 뜻
}
}
📌 (name:string | number)형태는 파라미터를 string이나 number로 지정하는 방식이다.
if 안에서는 string형의 name 반환,
else if 안에서는 number형의 name 반환,
else 안에서는 never형의 name 반환한다.
⇒ 즉, 제대로 인자(name)가 전달되었다면 else로 올 수 없다!
가장 많이 사용하는 순서는
- void ✔️ ✔️
- unknown ✔️
- never (거의 사용하지 않는다)
'TypeScript' 카테고리의 다른 글
[TS] Overloading(오버로딩)이 발생하는 경우 (0) | 2024.09.25 |
---|---|
[TS]Call Signatures 콜 시그니처란? (0) | 2024.09.25 |
[TS]타입스크립트 명시적 타입 선언 방법 (0) | 2024.09.23 |
[TS] 타입스크립트란? (0) | 2024.09.23 |
[챌린지] 타입스크립트 챌린지 준비 (0) | 2024.09.20 |
- Total
- Today
- Yesterday
- useEffect
- 오블완
- Cleanup
- 리액트네이티브
- ts
- NPM
- ReactJS
- 타입스크립트
- 챌린지1일차
- 카카오로그인
- 자바스크립트
- slice
- 노마드
- 재귀함수
- 프로젝트회고록
- props
- React
- Async
- CLI
- 프로그래머스
- 리액트
- splice
- 티스토리챌린지
- nomard
- create react app
- overloading
- TypeScript
- 오버로딩
- await
- useState
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |