2. Typescript
Typescript
는 강결합 언어로, 작성 후 Javascript
로 변환해 줌.
- 작성하는 동안 여러 에러를 잡아줌.
[1, 2, 3, 4] + false;
function divide(a, b) {
return a / b;
}
divide(2, 3);
divide("x");
2-2. Type System
- 변수 타입을 명시적으로 선언해도 되고, Typescript가 자동으로 추론하기도 함.
let a = "Hello";
a = 1;
let b: boolean = "x";
- 가급적 타입 추론을 유도하고, 꼭 명시해야만 하는 경우에 타입 선언하는 편이 효율적임.
2-2-1. Sort of Type
- Object 내 type을 선언할 때는 변수에
{}
를 추가하고 내부에 명시해준다.
const player: {
name: string;
age: number;
} = {
name: "js",
};
undefined
일 수도 있는 경우, 옵셔널을 추가한다.
const player: {
name: string;
age?: number;
} = {
name: "js",
};
- 여러 Object가 같은 타입을 반복한다면 상단에
type
을 선언한다.
type Player = {
name: string;
age?: number;
};
const playerJs: Player = {
name: "Js",
};
const playerSo: Player = {
name: "So",
};
- 함수에서 return 값의 type은 소괄호
()
와 중괄호{}
사이에 선언한다.
type Player = {
name: string;
age?: number;
};
function playerMaker(name: string): Player {
return {
name,
};
}
const js = playerMaker("Js");
js.age = 12;
const playerMaker = (name: string): Player => ({ name });
- 프로퍼티를 읽기 전용으로 만들 수도 있다.
readonly
를 적용한 프로퍼티는 수정할 수 없다.
type Player = {
readonly name: string;
age?: number;
};
const playerMaker = (name: string): Player => ({ name });
const js = playerMaker("js");
js.name = "ts";
js.age = 12;
- 배열 요소에 각각 type를 명시할 수 있다.(Tuple)
const player: [string, number, boolean] = ["js", 12, false];
typescript
에서 벗어날 때 타입을 설정하고 싶다면 any
로 명시한다.
- 단,
typescript
의 보호 역시 사라지므로 감수해야 한다.
const a: any[] = [1, 2, 3, 4];
const b: any = true;
a + b;
- 변수 타입을 미리 알지 못할 때
unknown
타입을 지정한다.
let a: unknown;
if (typeof a === "number") {
let b = a + 1;
}
if (typeof a === "string") {
let b = a.toUpperCase();
}
- 아무것도 return하지 않는 함수에는
void
타입을 지정한다.
function hello() {
console.log("x");
}
- 함수가 절대 return하지 않아야 할 때
never
를 지정한다.
- 예외 처리할 때 사용한다.
function hello(): never {
return console.log("x");
}
function hello(): never {
throw new Error("XXX");
}
function hello(name: string | number) {
if (typeof name === "string") {
name;
} else if (typeof name === "number") {
name;
} else {
name;
}
}
- 위 코드에서
name
은 "stirng"
이거나 "number"
여야만 하므로 마지막 else
는 절대 실행되어서는 안 되기 때문에 never
로 타입 추돈되었다.
참고
Nomad Coders - Typescript로 블록체인 만들기