리터럴 타입
//리터럴(값) 타입
let numA: 10 = 10;
let strA : 'hello' = 'hello'
let boolA : false = false
배열 정의하기
//배열 정의 방식 1.
let numArr: number[] = [1, 2, 3];
let strArr: string[] = ["hello", "im", "hoon"];
//배열 정의 방식 2.
let boolArr: Array<boolean> = [true, false, false];
//배열 들어가는 요소 타입이 다양할 경우
let multiArr: (number | string)[] = [1, "hello"];
//다차원 배열의 타입을 정의하는 방법
let doubleArr: number[][] = [
[1, 2, 3],
[4, 5],
];
튜플
//튜플
//길이와 타입이 고정된 배열
let tup1: [number, number] = [1, 2];
let tup2: [number, string, boolean] = [1, "2", true];
그래서 tup1.push() , tup1.pop() 과 같은 배열 메서드를 사용할 수 있는데, 그렇게 되면 고정된 배열을 말하는 튜플임에도 오류를 인식하지 못한다. 그러므로 배열 메서드를 사용할 때는 주의해야한다.
const users : [string, number][] = [
["강아무개", 1],
["이아무개", 2],
["김아무개", 3],
["박아무개", 4],
// [5, "강아무개"]
];
객체
//object
//객체의 프로퍼티까지 정의하는 객체 리터럴을 사용
//구조적 타입 시스템 -> property based 타입시스템
//명목적 타입 시스템 (대부분의 언어의 타입 시스템)
let user: {
id?: number; //optional property
name: string;
} = {
id: 1,
name: "Kim",
};
명목적 타입시스템
이라고 하여 object면 object , string이면 string 이렇게 해주면 되지만, 타입스크립트는 위처럼 프로퍼티까지 정의해주는 기존의 언어들과는 다른 형태이다. 타입스크립트는 구조적 타입 시스템
이라고 부른다.let config : {
readonly apiKey: string
} = {
apiKey : 'my api Key'
}
readonly
를 붙여보자. 읽기전용으로 되어 바꾸려고 하면 에러가 발생한다.타입 별칭과 인덱스 시그니처
//타입 별칭 type alias
type User = {
id: number;
name: string;
nickname: string;
birth: string;
bio: string;
location: string;
};
function func() {
type User = {}; // 함수 안에서는 이 타입이 적용
}
let user: User = {
id: 1,
name: "Kim",
nickname: "kingtypescript",
birth: "1992",
bio: "안녕",
location: "OO시",
};
// 인덱스 시그니처
//key, value 규칙을 기준으로 맞추는 것
type CountryCodes = {
[key: string] : string
}
let countryCodes : CountryCodes
// Korea : string;
// UnitedState : string;
// UnitedKingdom : string;
= {
Korea: 'ko',
UnitedState : 'us',
UnitedKingdom: 'uk'
}
type CountryNumberCodes = {
[key: string] : number
}
let countryNumberCodes: CountryNumberCodes = {
Korea: 410,
UnitedState: 840,
UnitedKingdom: 826,
};
type CountryCodes = {
[key: string] : string
}
enum 타입
const user1 = {
name: '김갑수',
role: 0 //0 <- 관리자
}
const user2 = {
name: '홍길동',
role: 1 //1 <- 일반 유저
}
const user3 = {
name: '아무개',
role: 2 //2 <- 게스트
//enum 타입
//여러가지 값들에 각각 이름을 부여해 열거해두고 사용하는 타입
//숫자만 보고 role을 하긴하는데 가끔 헷갈릴 때가 있다.
//숫자 제거해도 enum은 순서대로 0, 1, 2로 가져감
//enum은 특이하게도 컴파일해도 사라지지 않는다 ! 객체로 변환되기에 아래에서 값을 할당해주듯 사용 가능 한 것
enum Role {
ADMIN = 0,
USER = 1,
GUEST = 2,
}
const user1 = {
name: "김갑수",
role: Role.ADMIN,
};
const user2 = {
name: "홍길동",
role: Role.USER,
};
const user3 = {
name: "아무개",
role: Role.GUEST,
};
console.log(user1);
enum Role {
ADMIN,
USER,
GUEST,
}
enum Language {
korean = "ko",
english = "en",
}
const user1 = {
name: "김갑수",
role: Role.ADMIN,
Language: Language.korean,
};
이런식으로 enum을 해주게 되면 오류 방지에 큰 힘이 된다 ^^!
아 !참고로 enum은 컴파일해도 사라지지 않고 객체로 변환되기에 값처럼 할당해줄 수 있는 것이다.
좋은 글 감사합니다.