유형에서 속성 제외
유형에서 단일 속성을 제외하고 싶습니다. 어떻게 할 수 있습니까?
예를 들어
interface XYZ {
x: number;
y: number;
z: number;
}
그리고 나는 재산 z
을 제외하고 싶다.
type XY = { x: number, y: number };
3.5 이상의 TypeScript 버전
TypeScript 3.5에서는 Omit
유형이 표준 라이브러리에 추가되었습니다. 사용 방법은 아래 예를 참조하십시오.
3.5 미만의 TypeScript 버전
TypeScript 2.8에서는 Exclude
표준 라이브러리에 유형이 추가되어 생략 유형을 다음과 같이 간단하게 작성할 수 있습니다.
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>
2.8 이하의 TypeScript 버전
Exclude
2.8 이하 버전 에서는 유형을 사용할 수 없지만 위와 동일한 종류의 정의를 사용하기 위해 대체를 만들 수 있습니다. 그러나이 대체는 문자열 유형에서만 작동하므로 Exclude
.
// Functionally the same as Exclude, but for strings only.
type Diff<T extends string, U extends string> = ({[P in T]: P } & {[P in U]: never } & { [x: string]: never })[T]
type Omit<T, K extends keyof T> = Pick<T, Diff<keyof T, K>>
사용중인 해당 유형의 예 :
interface Test {
a: string;
b: number;
c: boolean;
}
// Omit a single property:
type OmitA = Omit<Test, "a">; // Equivalent to: {b: number, c: boolean}
// Or, to omit multiple properties:
type OmitAB = Omit<Test, "a"|"b">; // Equivalent to: {c: boolean}
typescript 2.8에서는 새로운 내장 Exclude
유형을 사용할 수 있습니다 . 2.8 릴리스 노트는 실제로는 '미리 정의 된 조건 유형 "이 언급 :
참고 : 제외 유형은 여기에 제안 된 Diff 유형의 적절한 구현입니다. [...] 간단하게 작성 되었기 때문에 생략 유형을 포함하지 않았습니다
Pick<T, Exclude<keyof T, K>>
.
이것을 예제에 적용하면 XY 유형은 다음과 같이 정의 할 수 있습니다.
type XY = Pick<XYZ, Exclude<keyof XYZ, "z">>
일부 변수를 선언하고 확산 연산자를 사용하여 유형을 추론하는 솔루션 을 찾았습니다 .
interface XYZ {
x: number;
y: number;
z: number;
}
declare var { z, ...xy }: XYZ;
type XY = typeof xy; // { x: number; y: number; }
작동하지만 더 나은 솔루션을 보니 기쁠 것입니다.
타이프 스크립트 3.5
Typescript 3.5부터 생략 도우미가 포함됩니다. TypeScript 3.5 RC-생략 도우미 유형
직접 사용할 수 있으며 업데이트 할 때 생략 도우미에 대한 자체 정의를 제거해야합니다.
라이브러리 사용을 선호하는 경우 ts-essentials를 사용하십시오 .
import { Omit } from "ts-essentials";
type ComplexObject = {
simple: number;
nested: {
a: string;
array: [{ bar: number }];
};
};
type SimplifiedComplexObject = Omit<ComplexObject, "nested">;
// Result:
// {
// simple: number
// }
// if you want to Omit multiple properties just use union type:
type SimplifiedComplexObject = Omit<ComplexObject, "nested" | "simple">;
// Result:
// { } (empty type)
추신 : 당신은 거기에서 다른 많은 유용한 것들을 찾을 것입니다;)
에서 3.5 타이프 라이터 :
interface TypographyProps {
variant: string
fontSize: number
}
type TypographyPropsMinusVariant = Omit<TypographyProps, "variant">
나는 그것을 좋아한다 :
interface XYZ {
x: number;
y: number;
z: number;
}
const a:XYZ = {x:1, y:2, z:3};
const { x, y, ...last } = a;
const { z, ...firstTwo} = a;
console.log(firstTwo, last);
참고 URL : https://stackoverflow.com/questions/48215950/exclude-property-from-type
'code' 카테고리의 다른 글
std :: forward는 어떻게 작동합니까? (0) | 2020.08.14 |
---|---|
Uri를 문자열로 변환 (0) | 2020.08.14 |
Java 8 LocalDate Jackson 형식 (0) | 2020.08.14 |
Go에서 int 유형의 최대 값 (0) | 2020.08.14 |
요청이 asp.net mvc에서 ajax인지 확인하는 방법은 무엇입니까? (0) | 2020.08.14 |