고급 Typescript 유형 분석!
소개
안녕하세요. TypeScript의 일부 고급 유형 분석에 대한 제 게시물에 오신 것을 환영합니다!
이 예제에는 숫자 "12"문자열을 수신하고 12를 제공하는 Type이 있습니다.
type Twelve = StringToNumber<"12"> // 12
암호
type StringToNumber<
Len extends string,
Arr extends unknown[] = []
> = `${Len}` extends `${Arr["length"]}`
? Arr["length"]
: StringToNumber<Len, [...Arr, unknown]>;
type One = StringToNumber<"1"> // 1
그래서 우리가 방금 읽었습니까? 음, 이것은 문자열을 취하는 유형이고 그 출력은 숫자로 구문 분석된 문자열입니다.
그래서 우리가 가지고 있다고 가정 해 봅시다 :
type One = StringToNumber<"1"> // 1
// 1st time this type is used by `type One = StringToNumber<"1">`
type StringToNumber<
Len extends string, // The string we are passing "1". It is a generic that we restrict to 'string' using the 'extends' keyword.
Arr extends unknown[] = [] // Another generic, in this case an array of unknown which by default is an empty array.
> = `${Len}` extends `${Arr["length"]}` // Is the template literal `1` == `[].length` ? At the start, the Arr is an empty array, so the length is 0. So 1 extends 0 is false. Think about extends in this case as '==' .
? Arr["length"] // If so, we return the length of the array.
: StringToNumber<Len, [...Arr, unknown]>; // Else, we call again (recursive) the StringToNumber type and we pass the 2 generic types: Len="1" and the Arr which at the moment is [unknown], since [...Arr, unknown] becomes [unknown] due to spreading Arr which is an empty array.
// The 2nd iteration, called by the recursivity from the previous statement.
type StringToNumber<
Len extends string, // The string we are passing "1" (again)
Arr extends unknown[] = [] // Now we are actually passing an array, which at the moment is [unknown] of length 1.
> = `${Len}` extends `${Arr["length"]}` // `1` == [unknown].length ? Now this is true, because Arr.length is 1
? Arr["length"] // Now, we return the length of the array, which is 1
: StringToNumber<Len, [...Arr, unknown]>;
결론
Typescript 복합 유형은 때때로 읽기 어려울 수 있습니다. 의심의 여지가 없지만 단계별로 분류하면 다소 명확해질 수 있습니다.
다음에서 나를 팔로우할 수 있습니다.
Reference
이 문제에 관하여(고급 Typescript 유형 분석!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aspnxdd/breaking-down-an-advanced-typescript-type-3pnj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)