Type Script lodash를 사용합니다.get과 비슷한 점 구분자 대상 경로 호출 퍼즐β
10753 단어 TypeScriptlodash퍼즐 유형tech
뭐랄까, 고대의 자바스크립트에서 일부 번거로움은 중간에서 편리하게 사용
lodash.get
한 적이 있는데, _.get(something, 'a.b.c')
라고 쓰면something.a.b.c
에 해당한다.이것은 이 위에 모형을 강제로 붙이려는 시도이다.
나는 이미 선구자가 있다고 생각했지만, 별로 보지 못해서 썼다.
또 아레이에 대한 index 기재법은 지원되지 않지만, 하고 싶다면 조금만 보충하면 될 것 같다고 말했다.
그럼 쓰세요.
type Fieldable = string | number;
type Fields2Dots<Obj, Prev extends string = ''> = Obj extends Fieldable
? `${Prev}`
: Obj extends Record<string, unknown>
? {
[K in Extract<keyof Obj, string>]: Obj[K] extends Fieldable ? `${Prev}${K}` : Fields2Dots<Obj[K], `${Prev}${K}.`>;
}
: '';
type Flatten<Obj extends string | Record<string, unknown>> = Obj extends string
? Obj
: Obj extends Record<string, infer V>
? V extends string
? V
: V extends Record<string, unknown>
? Flatten<V>
: never
: never;
export type ObjectDefinition2DotsNotation<Node> = Flatten<Fields2Dots<Node>>;
먼저 Fieldable
에서 검색하고자 하는 끝의 유형을 열거합니다.이번에는 글자와 숫자만 있다.Fields2Dots<Obj>
주어진 Obj를 다시 검색하고 .
구분자로 종점으로 거슬러 올라가는 경로를 열거한다.그리고 마지막으로 Flaten 목록의 끝에 있는 점 구분 문자열을 보여 줍니다.
사실 저는 정말 Fields 2Dots로 단숨에 펼치고 싶었는데 일단 퍼즐 맞추기를 하지 않아서 머리가 좀 탁해서 몰랐어요.
그럼 시험이라고 써.
test('', () => {
type Sample = {
callable: string;
abc: {
hoge: string;
xyz: {
tyh: string;
};
};
};
type SampleToDots = ObjectDefinition2DotsNotation<Sample>;
expectType<SampleToDots>('callable');
expectType<SampleToDots>('abc.hoge');
expectType<SampleToDots>('abc.xyz.tyh');
// @ts-expect-error accessor `abc.xyz` does not returns string but object so ObjectDefinition2DotsNotation won't generate the definition.
expectType<SampleToDots>('abc.xyz');
});
했네요.
Reference
이 문제에 관하여(Type Script lodash를 사용합니다.get과 비슷한 점 구분자 대상 경로 호출 퍼즐β), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/hatchinee/articles/358816e6a07bce텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)