문자열 튜플 사이에서 가장 긴 공통 접두사를 반환하는 LongestCommonPrefix를 작성하라.
만약 공동 접두사가 없다면 빈 문자열 ""를 반환하라.
Write a type, LongestCommonPrefix that returns the longest common prefix string amongst a tuple of strings.
If there is no common prefix, return an empty string "".
type IsUnion<T,U=T>=T extends U?
[Exclude<U,T>] extends [never] ?false:true
:never
type LongestCommonPrefix<T extends string[], P extends string = ''> =
T extends `${P}${infer Middle extends string}${infer _}`[]?
IsUnion<Middle> extends true?
P
:LongestCommonPrefix<T,`${P}${Middle}`>
:P
T는 문자열 튜플, P는 현재까지 검증된 가장 긴 공통 접두사를 의미한다.
먼저 T가 P와 어떤 한 글자, 그리고 나머지 글자_로 이뤄져 있는지 확인한다.
그렇지 않다면 현재까지 검증된 가장 긴 공통 접두사를 반환한다.
그렇다면, 그 다음 글자가 Union인지 확인한다.(Union이면 배열의 모든 값이 같은 다음 글자를 가지지 않는다는 뜻이다. Union이 아니라면 모든 배열이 같은 전치사를 공유한다는 것이다)
이를 확인해서 다음 접두사를 확인할지를 확인한다.