Typescript로 매핑된 유형
핵심 개념은 Javascript의
Array.map()
메서드와 매우 유사합니다. 새 배열을 반복하는 대신 기존 배열에서 새 배열을 파생시키려는 경우 Array.map()
메서드를 사용하고 이전 배열을 반복하여 유사하거나 다른 배열을 생성할 수 있습니다.이것이 기본적으로 매핑된 유형으로 수행하려는 작업입니다.
매핑된 유형이란?
매핑된 유형은
PropertyKey
s( [keyof](https://www.typescriptlang.org/docs/handbook/2/indexed-access-types.html)
를 통해 자주 생성됨)의 조합을 사용하여 키를 반복하여 유형을 생성하는 일반 유형입니다.속성으로 함수가 있는 유형이 있고 동일한 속성을 가진 새 유형을 생성하려고 하지만 부울로 다음과 같이 할 수 있다고 가정해 보겠습니다.
type MappedToBoolean <Type> = {
[Property in keyof Type]: boolean
}
type Animal = {
fly: () => void;
run: () => void;
swim: () => void
}
type NewAnimal = MappedToBoolean<Animal>
const dog: NewAnimal = {
fly: false,
run: true,
swim: true
}
아래에서 이렇게 하면 유형 오류가 발생합니다.
const dog: NewAnimal = {
fly: () => undefined, // '() => undefined' is not assignable to type 'boolean'
run: true,
swim: true
}
매핑 수정자란?
매핑 중에 적용할 수 있는 두 가지 추가 수정자가 있습니다:
readonly
및 ?
각각 가변성과 선택성에 영향을 미칩니다.-
(추가) 또는 +
(삭제) 접두사를 붙여 이러한 수식어를 제거하거나 추가할 수 있습니다.예를 들어 유형을 통해 매핑하고 모든 속성을 선택 사항으로 만들려면 다음과 같이
+
한정자를 추가하면 됩니다.type MappedToBoolean <Type> = {
[Property in keyof Type]+?: Type[Property]
}
as 키워드를 사용한 매핑
다음과 같이 키 유형을 다른 유형으로 다시 매핑할 수 있습니다.
type MappedTypeWithNewProperties<Type> = {
[Properties in keyof Type as NewKeyType]: Type[Properties]
}
사용 사례
다양한 형식을 조작하는 방법을 알면 모듈식 또는 확장 가능한 형식을 효율적으로 만들고 관리할 수 있습니다.
이것을 사용한 간단한 시나리오는 객체의 하위 유형을 취하고 객체 배열을 검색하여 슈퍼 객체가 존재하는지 확인할 수 있는 함수가 필요할 때였습니다.
개체의 하위 유형은 말 그대로 모든 속성이 선택적일 수 있는 유형이므로 모든 속성이 선택적인 기존 유형의 새 유형을 만들었습니다.
type MakePropertiesOptional<Type> = {
[Property in keyof Type]+?: Type[Property]
}
type Person = {
name: string;
age: number;
school: string;
state: string;
number: string;
country: string
}
function searchArrayOfPersons(person: MakePropertiesOptional<Person>) {
// .. some more codes
return undefined
}
searchArrayOfPersons({name: "Kayode"})
searchArrayOfPersons({address: "some address"})
// Type Error: '{ address: string}': is not assignable to parameter
// of 'MakePropertiesOptional<Person>`
이 글을 재미있게 읽으셨다면 buying me a coffee 으로 제 취미를 지원해 주세요.
Reference
이 문제에 관하여(Typescript로 매핑된 유형), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/zt4ff_1/mapped-types-with-typescript-59e7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)