TS 기본타입¶
ts에서 쓰이는 기본 타입들
- number
- string
- boolean
- undefined -> 보통
let age: number | undefined;
와 같이 쓰이고 단독으로 쓰이진 않는다. - null: 거의 안쓰인다.
- unknown: any처럼 모든 타입을 받을 수 있지만 의미적으로 잘 모를때 씀
-
any: 무엇이든 상관 없다. 인데 거의 쓰이지 않고 외부 api나 다른 플랫폼에서 값을 받아와야 할 경우 쓰인다.
-
void: return이 undefined인 경우
- never:
throw new Error()
나while(true)
처럼 함수가 리턴값이 없을 경우 사용
배열¶
const fruits: string[] = ['토마토', '바나나'];
const scores: Array<string> = ['토마토', '바나나'];
function printArray(fruits: readonly string[]){}
readonly
를 사용하고 싶으면 string[]
으로만 해야함
Type Aliases: 새로운 타입을 정의¶
type Text = string;
const name: Text = 'jongho';
const address: Text = 'korea'
type Num = number;
type Student = {
name: string;
age: number;
}
const student: Student = {
name: 'jongho',
age: 27,
}
String Literal Types: 정확한 문자열을 타입으로 지정¶
type Name = 'jongho';
let jonghoName: Name;
jonghoName = 'jongho';
type Bool = true; // true값만 가질 수 있음
Union Types: OR¶
type Direction = 'left' | 'right' | 'up' | 'down';
function move(direction: Direction) {
console.log(direction)
}
// function: login -> success, fail
type SuccessState = {
response: {
body: string;
}
}
type FailState = {
reason: string;
}
type LoginState = SuccessState | FailState;
discriminated union¶
- union 타입에서 같은 속성값을 가지게 하여, 구분짓기 편하게 만든 union 형식
type SuccessState = { result: 'success'; // discriminated union response: { body: string; } } type FailState = { result: 'fail'; // discriminated union reason: string; } type LoginState = SuccessState | FailState; function printLoginState(state: LoginState) { if(state.result === 'success') { console.log(state.response.body); } else { console.log(state.reason) } }
Intersection Types: &¶
- union과 반대되는 개념으로 두개의 타입 모두의 형식을 가져야 한다.
type Student = { name: string; score: number; } type Worker = { employeeId: number; work: () => void; } function internWork(person: Student & Worker) { // 이 부분 console.log(person.name, person.employeeId, person.work); } internWork({ name: 'jongho', score: 100, employeeId: 12345, work: () => {} })
enum¶
- 다른 언어에서 사용되는 형식인데 이것보다 union을 쓰는 것이 더 좋다고 한다.
- 왜냐하면 한번 값을 할당한 뒤에 같은 타입의 다른 값을 할당하는 것이 가능하기 때문
enum Days { Monday = 1, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday } console.log(Days.Monday); // 1 let day = Days.Sunday; // 7 day = 10; // 10 console.log(day); // 10
Type Inference: 타입 추론¶
let text = 'hello'; // string으로 추론
function print(message = 'hello'/* string */ ) { // return이 void로 추론
console.log(message);
}
print('hello')
Type Assertions: 타입 강제¶
function jsStrFunc(): any {
return 2
}
const result = jsStrFunc();
console.log((result as string).length); // result가 string 타입이라고 강제해서 에러발생
console.log((<string>result).length); // result가 string 타입이라고 강제해서 에러발생
(result as string)
- (<string>result)
동일
작성자: 이종호
작성일: 2021-07-18