For Javascript Programmers
Typescript: Javascript + 타입 시스템 레이어
자바스크립트는 string, number, object undefined같은 원시 타입을 가지고 있지만, 전체 코드베이스에 일관되게 할당되었는지는 미리 확인해주지 않는다.
타입스크립트가 추가하는 타입 시스템 언어 확장
1.타입추론
변수를 생성함과 동시에 특정 값을 할당할 경우 타입스크립트는 그 값을 변수의 타입으로 사용함
2.타입 정의하기
몇몇 패턴은 자동으로 타입을 제공하기 힘드니 각각의 타입을 지정해주는것
Ex)
interface User {
name: string;
id: number;
}
const user: User = {
name: "Hayes",
id: 0,
};
인터페이스는 클래스로도 선언할 수 있음
class UserAccount {
name: string;
id: number;
constructor(name: string, id: number) {
this.name = name;
this.id = id;
}
}
const user: User = new UserAccount("Murphy", 1);
인터페이스는 함수에서 매개변수와 리턴 값을 명시하는데 사용되기도 함
function getAdminUser(): User {
//...
}
function deleteUser(user: User) {
// ...
}
자바스크립트 원시 타입: boolean, biting, null, number, string, symbol, object, undefined
Any)
let value : any = 10;
console.log(typeof value); // number
console.log(value.length); // undefined
Unknown)
let valueNum : unknown = 10;
let valueStr : unknown = 'Test';
console.log(valueNum.length); // 문제 발생
console.log(valueStr.length); // 문제 발생
Never: 절대 발생하지 않을 값
함수가 항상 예외를 던지거나, 절대 반환되지 않는 무한루프에 빠지는 등의 상황에서 사용된다.
Ex) throw error
function throwError(message: string): never {
throw new Error(message);
}
이러한 함수는 항상 예외를 던지기 때문에 절대로 정상적으로 반환되지 않는다. 그래서 함수의 반환타입은 never가 맞다
Ex) 무한 루프
function infiniteLoop(): never {
while (true) {
// 무한 루프
}
}
무한히 실행되기에 타입이 반환되지 않음
Ex) 주로 유니온 타입에서 활용됨
function processResult(result: string | never) {
if (typeof result === 'string') {
// result를 처리하는 로직
} else {
// 예외 처리 로직
}
}
함수가 예외를 던지는지 값을 반환하는지에 따라서 타입을 지정할 수 있음