let 변수명: 타입 = 값;
Object
(객체)는 여러 타입의 상위 타입이다. (Array, function, Date ...)
let obj: object = {};
let arr: object = [];
let func: object = function() {};
let date: object = new Date();
컴파일 옵션에서 엄격한 검사타입(strict)을 true로 설정하면, null은 포함하지 않는다.
let nullValue: object = null;
// Type 'null' is not assignable to type 'object'.
객체는 속성들에 대한 타입을 개별적으로 지정할 수 있다.
반복적으로 사용된다면, interface나 type을 사용할 수 있다.
let user: { name: string, age: number } = {
name: 'miniddo',
age: 20
}
Any
는 모든 타입을 허용함으로 사용하지 않는 것이 좋다.
Any 사용을 엄격하게 금지하려면, 컴파일 옵션에 noImplicitAny: true
를 사용해 에러를 발생시킨다.
let age: any = 20;
any = '20';
any = false;
let list: any[] = [1, 'hello', false, []];
let und: undefined = undefined;
let nul: null = null;
void
는 일반적으로 값을 반환하지 않는 함수에서 사용한다.
// 반환 값이 있는 경우
function func(message: string): string {
return message;
}
console.log(func('hello')); // hello
// 반환 값이 없는 경우
function func(message: string): void {
console.log('no return');
}
console.log(func('hello')); // no return
Unknown
은 알 수 없는 타입으로 any 를 제외한 다른 타입에 할당할 수 없다.
let a: unknown = 123;
let v1: any = a;
let v2: boolean = a; // Type 'unknown' is not assignable to type 'boolean'
let v3: number = a; // Type 'unknown' is not assignable to type 'number'
// 타입을 단언하면('as') 할당할 수 있다.
let v4: boolean = a as boolean;
반면 any
타입은 어디든 할당할 수 있다.
두 타입 모두 가급적 사용하지 않는 것이 좋다. ( 타입스크립트이기 때문이다! )
let a: any = 123;
let v1: boolean = a; // 123
let v2: number = a; // 123
never
은 절대 발생하지 않을 값이다.
function error(message: string): never {
throw new Error(message);
}
// 타입 선언을 잘못한 경우
let never: [] = [];
never.push(1); // Argument of type 'number' is not assignable to parameter of type 'never'