반응형
유형 스크립트에 유형 안전 '선택' 기능을 기록합니다
에는 다음과 같이 사용되는 선택 기능이 있습니다:
var object = { 'a': 1, 'b': '2', 'c': 3 };
_.pick(object, ['a', 'c']);
// => { 'a': 1, 'c': 3 }
나는 이것을 활자로 안전한 버전으로 쓰고 싶다.
이 기능의 사용은 다음과 같아야 한다
pick(object, o => o.a, o.b)
목표는 동일한 키를 두 번 지정하지 않고 동시에 유형 안전을 유지하는 것입니다.
이것을 달성하는 것이 가능한가요?
찾으시는 것 같네요. 이런 것도 괜찮으시겠어요?
function pick<T, K extends keyof T>(obj: T, ...keys: K[]): Pick<T, K> {
const ret: any = {};
keys.forEach(key => {
ret[key] = obj[key];
})
return ret;
}
const o = {a: 1, b: '2', c: 3}
const picked = pick(o, 'b', 'c');
picked.a; // not allowed
picked.b // string
picked.c // number
lodash 유형 정의는 소품을 전파하는 데 사용되므로 수동으로 정의할 필요가 없습니다. 또는 를 사용하여 설치합니다.
포함(es2019):
function pick<T extends object, K extends keyof T> (base: T, ...keys: K[]): Pick<T, K> {
const entries = keys.map(key => ([key, base[key]]));
return Object.fromEntries(entries);
}
여기 내 거야, 사용
function pick<T, K extends keyof T>(object: T, keys: K[]): Pick<T, K> {
return Object.assign(
{},
...keys.map(key => {
if (object && Object.prototype.hasOwnProperty.call(object, key)) {
return { [key]: object[key] };
}
})
);
};
@Bayu Karnia를 확장하는 여기 내 것이 대답한다:
function pick<T extends Record<string | number | symbol, T>, K extends keyof T>(
object: T,
keys: K[]
): Pick<T, K> {
return Object.assign(
{},
...keys.map((key: K) => {
return { [key]: object[key] };
})
);
}
이던을 기반으로.로데이의 대답은, 나는 몇 가지 변화를 주었다. 활자를 사용하고 제거합니다.
export function pick<T, K extends keyof T>(obj: T, keys: K[]) {
return keys.reduce((acc, val) => {
return (acc[val] = obj[val]), acc;
}, {} as Pick<T, K>);
}
내가 논쟁과 카레를 교환할 수 있었던 것처럼 보이고 마침내 유형이 충분하다. 누군가 설명해주면 고맙겠어요:
const pick = <T, K extends keyof T>(keys: (keyof T)[]) => <R extends T>(obj: R) => keys.reduce<Pick<R, K>>((acc, key) => {
(acc as T)[key] = obj[key]
return acc;
}, {} as Pick<R, K>)
반응형
'개발하자' 카테고리의 다른 글
Python의 고정밀 워드 정렬 알고리즘 (0) | 2023.04.17 |
---|---|
Python wordpress xmlrpc -32700 오류, wordpress 4.8 (1) | 2023.04.17 |
Create a list of a class as an attribute of a second class in Python (0) | 2023.04.15 |
테라폼과 함께 GCP 클라우드를 사용할 때 API를 자동으로 활성화할 수 있습니까? (0) | 2023.04.15 |
FastAPI를 사용하여 요청에 헤더가 없을 때 사용자 지정 응답을 반환하는 방법은 무엇입니까? (0) | 2023.04.14 |