반응형
👉 자바스크립트(ES5)의 Superset(상위확장)
1️⃣ 기존의 자바스크립트(ES5) 문법을 그대로 사용할 수 있다
또한, ES6의 새로운 기능들을 사용하기 위해 Babel과 같은 별도 트랜스파일러(Transpiler)를 사용하지 않아도 ES6의 새로운 기능을 기존의 자바스크립트 엔진(현재의 브라우저 또는 Node.js)에서 실행할 수 있다.
2️⃣ 정적 타입
function sum(a: number, b: number) {
return a + b;
}
sum('x', 'y');
// error TS2345: Argument of type '"x"' is not assignable to parameter of type 'number'.
TypeScript는 정적 타입을 지원하므로 컴파일 단계에서 오류를 포착할 수 있다.
3️⃣ 객체지향
인터페이스, 제네릭 등과 같은 객체지향 프로그래밍 지원
- 인터페이스
// 인터페이스의 정의
interface Todo {
id: number;
content: string;
completed: boolean;
}
// 변수 todo의 타입으로 Todo 인터페이스를 선언하였다.
let todo: Todo;
// 변수 todo는 Todo 인터페이스를 준수하여야 한다.
todo = { id: 1, content: 'typescript', completed: false };
// 클래스와 인터페이스
interface User {
name: string;
id: number;
}
class UserAccount {
name: string;
id: number;
constructor(name: string, id: number) {
this.name = name;
this.id = id;
}
}
const user: User = new UserAccount("Murphy", 1);
interface User {
name: string;
id: number;
}
// ---cut---
function getAdminUser(): User {
//...
}
function deleteUser(user: User) {
// ...
- 제네릭
Generic은 재사용을 목적으로 함수나 클래스의 선언 시점이 아닌, 사용(호출) 시점에 타입을 선언할 수 있
// generic사용. 재사용 가능하면 타이핑도 들어가 자동 완성 해 줌
function logText<T>(param: T): T {
return param;
}
// any 사용. 재사용은 할 수 있으나 타이핑이 안 됨
function logText(param: any): any {
return param;
}
function identity<T>(arg: T): T {
return arg;
}
// 타입 지정
console.log(identity<number>(3));
console.log(identity<string>("coding"));
// 타입 추론 해 줌
console.log(identity([1, 3, 5]));
// interface, class에 generic 사용
interface DropDown<T> {
value: T;
selected: boolean;
}
const obj: DropDown<number> = {
value: 1,
selected: false,
};
class Human<T, K> {
constructor(private _name: T, public age: K) {}
say(): void {
console.log(`${this._name} is ${this.age} years old`);
}
}
const me = new Human<string, number>("foo", 100);
console.log(me);
4️⃣ 유니언 (Unions)
유니언은 타입이 여러 타입 중 하나일 수 있음을 선언하는 방법
// any를 사용하는 경우
function getAge(age: any) {
age.toFixe(); // 에러 발생, age의 타입이 any로 추론되기 때문에 숫자 관련된 API를 작성할 때 코드가 자동 완성되지 않는다.
return age;
}
// 유니온 타입을 사용하는 경우
function getAge(age: number | string) {
if (typeof age === 'number') {
age.toFixed(); // 정상 동작, age의 타입이 `number`로 추론되기 때문에 숫자 관련된 API를 쉽게 자동완성 할 수 있다.
return age;
}
if (typeof age === 'string') {
return age;
}
return new TypeError('age must be number or string');
}
반응형
'지식' 카테고리의 다른 글
싱글톤 singletone pattern 예제 예시 의미 특징 (0) | 2023.03.22 |
---|---|
SVG 사이즈 타이틀 SVG란 SVG 정의 SVG 수정 (0) | 2023.03.22 |
flex-grow flex-shrink 플렉스 그로우 쉬링크 사용법 예제 예시 (0) | 2023.03.21 |
HTML CSS 기초 웹사이트 표준 접근성 크로스 브라우징 (0) | 2023.03.21 |
정적 타입과 동적 타입 언어의 차이점 (0) | 2023.03.21 |
댓글