아래와 같이 타입을 설정하면 다른 타입의 종류를 할당할 수 없다. 다른 타입을 할당할 경우 타입 에러가 발생한다.
const age:number = 30 // number 타입만 할당이 가능하다.
const name:string = 3 // error (string 타입을 할당해야 한다.)
const name:string = 'sara'; // string 타입만 할당이 가능하다.
const isActive:boolean = true; // beelean 타입만 할당이 가능하다.
let age: number | undefined // number 이거나 undefined
age = 30;
age = undefined;
function sum (): number | undefined {
// .. return 되는 값이 number 이거나 undefined
};
let name: string | null;
name = 'ann';
name = null;
어떤 데이터의 종류가 담길지 알 수 없는 상태
로 어떤 타입의 데이터든 할당할 수 있다.let unknown:unknown = 'hello world';
unknown = 30;
unknown = true;
어떤 데이터의 종류든 담을 수 있는 상태
로 어떤 타입의 데이터든 할당할 수 있다.let anything:any = 'hello world';
unknown = 30;
unknown = true;
function object(obj:object) {}
object({age: 22});
object([1, 2, 3, 4, 5]);
const names: string[] = ['teaback', 'taesoon', 'sara'];
const names: Array<string> = ['teaback', 'taesoon', 'sara'];
const ages: number[] = [20, 30, 50];
const ages: Array<number> = [20, 30, 50];
const arr: (string | number)[] = [10, 'hello', 22, 'world', 34];
const arr: Array<string | number> = [11, 'hello', 2, 'world', 33, 35];
const arr: (any)[] = [1, 'a', 2, 'b', 'c', 3];
const arr: Array<any> = [1, 'a', 2, 'b', 'c', 3];
function readNumbers(numbers: readonly number[]) { // Array<numbers>는 사용할 수 없다.
console.log(numbers)
numbers.push(6); // error
}
readNumbers([1, 2, 3, 4, 5])
function print():void {
console.log('hello');
return; // 생략 가능
}
function throwError(message: string): never {
// message -> server (log)
// throw new Error(message);
// while 문..
}
function fetchNum(id: string): Promise<number> {
...
return new Promise((resolve, reject) => {
resolve(100);
});
}
function fullName(firstName:string, lastName?:string) {} // lasName을 전달 받을 수 있고 전달 받지 않을 수 있다.
fullName('minsoo', 'kim');
fullName('minsoo');
function printMessage(message:string = 'default message') {};
printMessage(); // default message
function addNumbers(...numbers: number[]): number {
return numbers.reduce((acc, curr) => acc + curr);
};
addNumbers(1, 2);
addNumbers(1, 2, 3, 4);
let anything: [string, number];
anything = ['abc', 123];
anything[0];
anything[1];
const [string, number] = anything;
Text
, Num
, Person
라는 타입을 정의할 수 있다.type Text = string;
const name: Text = 'ellie';
const const address: Text = 'korea';
type Num = number;
type Person = {
name: string;
age: number;
};
const person: Person = {
name: 'kim rae young',
age: 33,
};
type Name = 'name';
let name = Name;
name = 'name'
Size
타입과 같이 다중의 타입을 말한다.Size
타입을 인자로 전달받기 때문에 25 | 26 | 27 | 28
의 값만 전달받을 수 있다.type Size = 25 | 26 | 27 | 28;
function printSize(size: Size) {
console.log(size);
};
printSize(25);
printSize(27);
type A = {
name : string;
age: number;
};
type B = {
feeling : () => void;
}
function anything(AB: A & B) {
};
anything({
name: 'taeback',
age: 1,
feeling: () => {}
});
enum Aphabet {
A,
B,
C,
D,
...
}
// enum에 따로 값을 정하지 않으면 0 부터 하나씩 증가한다.
// 1을 할당 해주면 1부터 증가하고 문자열도 할당할 수 있다.
let b = Aphabet.B;
b = 10
console.log(b); // 10
// 위와 같이 다른 값을 할당할 수 있어 가능한 enum을 사용하지 않는 것이 좋다.