작동 논리가있는 필터 함수가 있지만 유형을 작성하는 방법을 모르겠습니다.
export function filter<T>(object: T, ...keys: Array<keyof T>): ??? {
let index = -1;
const length = keys.length;
const result = { ...object };
while (++index < length) {
const key = keys[index];
if (key in object) delete result[key];
}
return result;
}
filter({ a: 1, b: 2 }, 'b') // { a: 1 }
Typescript는 여전히 'b'속성이 존재한다고 생각하므로 .NET keys
에서 제거 되도록 지정하는 방법을 찾고 있습니다 T
.
나는 익숙 Omit
하지만 (일반적으로 Typescript를 처음 접하는) 이것에 역할을 할 수 있다고 생각하지만 그것을 만들고 Array
만날 방법을 찾지 못했습니다 ...
누군가 내가 찾고있는 길을 봅니까?
(btw의 특정 서명은 filter
중요하지 않습니다. 유형 안전성에 더 도움이되는 대체 구현이 있다면 기쁩니다.)
해결책은 keyof T
제네릭 으로 추출 하는 것입니다. 이것은 작동합니다.
export function filter<T, K extends keyof T>(object: T, ...keys: Array<K>): Omit<T, K> {
let index = -1;
const length = keys.length;
const result = { ...object };
while (++index < length) {
const key = keys[index];
if (key in object) delete result[key];
}
return result;
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다