[TS] TypeScript

Younghwan Cha·2023년 8월 18일
0

javaScript & typeScript

목록 보기
5/5
post-thumbnail

index signature


index signature 는 {[key : T] : U}형식으로, 객체가 <key, vlaue>형식이며 key와 value의 타입을 정확하게 명시해야하는 경우 사용할 수 있다.

다음 food 의 타입을 생각해보자

const food = {
  '짜장면': '중식',
  '파스타': '양식'
};

이런 경우 food: { [ key: string ]: string } 와 같이 type 을 표현 할 수 있다.

type assertion


기존의 type 을 특정 type 으로 바꾸기 위해서 type assertion 을 사용 할 수 있다. 예시를 보자

type User {
  name: string;
  age: number;
  height: number;
}

const user = new User('cha', 20, 180);
  
const tmp = Object.entries(user).map(([key, _]: [string, any]) => {
  ( ... func1(key as User) ))
};

위의 경우에서 Object.entries 의 [key, value] type 이 [string, string | number | string[]] 이기 때문에 [key, _] 에 [string, any] 타입을 지정해 주었지만, 자세히 말하자면 실제 key 의 type 은 keyof User 이다. 때문에 안에서 사용 할때 실제 타입인 User 를 지정해서 사용하고 싶다면 func1(key as User) 에서 처럼 as 를 통한 type assertion 을 사용하면 된다.

[ts type assertion] https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#type-assertions

keyof <> vs key in keyof <>


keyof <> 는 키(key)를 타입으로 가져오는 데 사용되고, key in keyof <> 는 키(key)에 대한 맵핑된 타입을 생성하는 데 사용된다

type keyInKeyOf = {[ key in keyof <>]: string };

type keyOf = keyof <>;

Record


Record 는 TypeScript에서 제공하는 유틸리티 타입 중 하나로, 특정 타입의 키와 특정 타입의 값을 가진 객체를 생성하는데 사용됩니다. Record 는 다음과 같이 정의된다.

type Record<K extends keyof any, T> = {
    [P in K]: T;
};
profile
개발 기록

0개의 댓글