https://facebook.com/groups/graphql-kr logo
#클럽-프론트엔드
Title
# 클럽-프론트엔드
u

이찬희

08/03/2021, 1:34 PM
타입스크립트로
directive @${DirectiveName} on ${DirectiveLocation}
형태 타입을 만들어보고 있는데 여러개의 directive location 을 선언할 수 있도록 타입을 지정해주려면 어떻게 해야 할까요?
h

Hyeseong Kim

08/03/2021, 1:35 PM
음..? 이걸 왜 template literal type 으로 ㅋㅋㅋ
u

이찬희

08/03/2021, 1:35 PM
이렇게는 해줬는데
FIELD_DEFINITION | OBJECT
같이 해줄 수도 있을까요?.?
h

Hyeseong Kim

08/03/2021, 1:35 PM
뭐가 되면 되는건가요
u

이찬희

08/03/2021, 1:35 PM
just for fun 이긴 합니다 ㅋㅋ
h

Hyeseong Kim

08/03/2021, 1:35 PM
재귀함수 만드시면 됩니다
u

이찬희

08/03/2021, 1:36 PM
타입에 대한 재귀를 말씀하시는건가요?
h

Hyeseong Kim

08/03/2021, 1:36 PM
넴 리터럴리 재귀함수
근데 좀 애매한게
그냥 저걸 다 묶어서 돌리면 스펙이랑 호환되지 않을거기 때문에
타입이 다 세분화 되어야 할거에요
u

이찬희

08/03/2021, 1:37 PM
오호..
h

Hyeseong Kim

08/03/2021, 1:37 PM
그냥 재귀돌리는건 해서 보여드릴게요
ohh 1
u

이찬희

08/03/2021, 1:38 PM
감사합니다 ㅎㅎ 제너릭 타입에 대해서는 예쩐에 Awaited 처럼 시도하면 대략 감이 잡힐듯 한데 지금처럼 타입이 된 경우에는 어떻게 해야 하나 고민중이던 찰나였습니다
h

Hyeseong Kim

08/03/2021, 1:38 PM
아 왜 playground 는 vim 입력도 지원 안하나요
불편하네
u

이찬희

08/03/2021, 1:39 PM
tmi: 여러개에 대한 추론은 just for fun 인데 지금같은 형태를 쓴건 디렉티브에 쓸 수 있는 로케이션이 뭐뭐 있는지 아직 몰라서 만들게 되었습니다
h

Hyeseong Kim

08/03/2021, 1:43 PM
음 근데 팩토리얼이라서 이대로는 안될거같은데 ㅋㅋ
재귀 깊이가 50까지밖에 안내려가요
타입스크립트 제약사항
u

이찬희

08/03/2021, 1:43 PM
오 그런 제약이 있군요?
h

Hyeseong Kim

08/03/2021, 1:55 PM
음 ㅋㅋㅋ
일단 너무 기다리시면 재미없으니
몇가지 기본 세트를 먼저 제공해드리겠습니다
이것만 있어도 감잡고 푸실 수 있을 것 같아요
이걸로 이제 원하는 조건식 포함한 재귀함수를 만드시면 됩니다
깊이(차수) 제한 안에서 원하시는걸 다 할 수 있음
u

이찬희

08/03/2021, 2:00 PM
오 한번 츄라이 해보겠습니다
h

Hyeseong Kim

08/03/2021, 2:01 PM
디렉티브에 쓸 수 있는 로케이션이 뭐뭐 있는지 아직 몰라서 만들게 되었습니다
요건 GraphQL 명세에 다 나와있어용
u

이찬희

08/03/2021, 2:02 PM
네네네 볼때마다 들락날락 하게 되어서 움 그냥 북마크를 좀더 자주 보는것도 방법이겠지만요 ㅋㅋㅋ
h

Hyeseong Kim

08/03/2021, 2:03 PM
그냥 validate schema 하면 알려주긴 합니다 ㅋㅋㅋㅋ
인덱스 번호 다루기 위해 산술연산 필요하시면 이런식으로..
Copy code
type MakeTuple<T, N extends number, Result extends readonly T[] = []> = {
  0: Result,
  1: MakeTuple<T, N, [T, ...Result]>,
}[Result['length'] extends N ? 0 : 1];

type AddOne<N extends number> = [...MakeTuple<unknown, N>, unknown]['length'] & number;
type Add<A extends number, B extends number> = [...MakeTuple<unknown, A>, ...MakeTuple<unknown, B>]['length'] & number;

type SubOne<N extends number> = MakeTuple<unknown, N> extends [unknown, ...infer Tail] ? Tail['length'] : never;
type Sub<A extends number, B extends number> = B extends 0 ? A : Sub<SubOne<A>, SubOne<B>>;

type Mul<A extends number, B extends number, Result extends number = 0> = B extends 0 ? Result : Mul<A, SubOne<B>, Add<Result, A>>;
암튼 그냥 코드 제너레이터를 만드시는게 정신건강 + 맥북수명 + 탄소절감에 훨신 이롭습니다
zzzz 1
2 Views