타입스크립트의 여러 타입들에 대한 설명들.
타입을 지정하지 않더라도 명확한 경우 타입스크립트에서 타입을 추론 가능하다.
let a = 1
의 경우 number라고 타입 지정을 하지 않았으나 자동으로 a는 number가 된다.
비슷한 타입을 반복 사용할 경우 별명을 붙힐수 있다.
type human = {
name: string,
age: number
}
문자열인 사람 이름과 숫자인 나이를 저장할수 있는 object type의 별명이다.
숫자를 저장할수 있다, 다른 언어와 달리 정수와 실수 둘 다 저장 가능하다.
let num: number
num = 1
num = 2.3
문자열을 저장할수 있다.
let str: string
str = 'hello string'
true / false를 저장할수 있다.
let b: boolean
b = true
b = false
자바스크립트의 object를 저장하는 코드인데,
let human: object = {
name: 'Sally'
}
위와 같이 object를 사용할수도 있으나, 이는 권장되지 않는다.
이보다는
let human: {
name: string
} = {
name: 'Sally'
}
와 같이 key의 이름과 value의 type을 지정해 만들수도 있다.
아래 경우 자동 완성도 되면서 에러도 나지 않는다.
오브젝트 안에 오브젝트가 있는 경우에도 비슷하게 작성하면 된다.
type human = {
name: string,
age: number,
eye: {
sight: number,
disease: string
}
}
인간 오브젝트 내부에 눈의 상태를 나타내는 오브젝트를 포함하는 타입이다.
배열의 경우
string[]
int[]
와 같이 특정 자료형만 담을수 있는 배열과
any[]
와 같이 어떤것이든 담을수 있는 배열이 있다.
Union 자료형을 이용해
(string | number)[]
과 같이 복수 자료형을 담을수 있도록 할수도 있다.
길이와 내장 타입이 모두 저장되어 있는 배열이다.
예를 들자면 첫번째 값은 무조건 숫자이고 두번째 값은 무조건 문자열인 두 길이의 배열을 들수 있다.
이 경우
let a: [number, string] = [1, 'a']
와 같이 대괄호 안에 type을 적어주면 된다.
enum Role {ADMIN, USER}
과 같이 선언하며 기본적으로 값은 시작이 0이 들어가고 1씩 증가되는 숫자가 들어간다.
사용은
let a: Role = Role.ADMIN
과 같이 할수 있으며
enum Role {ADMIN=4, USER}
과 같이 시작 숫자를 바꿀수도 있고
문자열을 값으로 지정해 줄수도 있는데, 문자열을 지정시 자동으로 1씩 증가하는게 안되기에 모든 값이 값을 대입해 주어야 한다.
enum Role {ADMIN='admin', USER='user'}
어떤 값이든 저장할수 있는 type이다.
대입또한 자유롭다.
만약 a라는 자료형에 숫자나 문자열을 넣고 싶을때 쓰일수 있으며
| 를 이용해 두 자료형을 구분한다.
let a: string | number
a = 1
a = 'a'
// 에러가 발생하지 않는다.
함수의 패러미터에도 사용이 가능한데, 이 경우 런타임에 타입체크가 필요하다.
function add(n1: number | string, n2: number | string){
// 타입 체크 이후 알맞은 코드를 실행한다.
if(typeof n1 === 'number' && typeof n2 == 'number') {
return n1 + n2;
} else {
return n1.toString() + n2.toString();
}
}
const 변수의 경우 위 타입들이 아닌 자기 자신이 type이 된다.
const hello = "hello" // "hello" type
let bye = "bye" // bye type
이를 이용해
type flower = "rose" | "iris"
와 같이 일부 문자열만 받을수 있는 타입이나
type class = 1 | 2 | 3 | 4
일부 숫자만 받을수 있는 type을 지정할수 있다.
any와 동일하게 사용 가능하나, 다른 자료형에 대입 전에 type check를 필요로 합니다.
함수가 끝나지 않거나 중간에 에러로 인해 리턴이 없을 경우 리턴타입으로 사용됩니다.
함수가 리턴하지 않아도 된다는것을 의미합니다.
save: Map<number, {value: number, createdAt: Date, duration: number}>