Typescript类型体操 - StartsWith

题目

中文

实现StartsWith<T, U>,接收两个 string 类型参数,然后判断T是否以U开头,根据结果返回truefalse

例如:

type a = StartsWith<'abc', 'ac'>; // expected to be false
type b = StartsWith<'abc', 'ab'>; // expected to be true
type c = StartsWith<'abc', 'abcd'>; // expected to be false

English

Implement StartsWith<T, U> which takes two exact string types and returns whether T starts with U

For example

type a = StartsWith<'abc', 'ac'>; // expected to be false
type b = StartsWith<'abc', 'ab'>; // expected to be true
type c = StartsWith<'abc', 'abcd'>; // expected to be false

答案

递归(第一时间想到的, 不是最优解)

type StartsWith<
    T extends string,
    U extends string
> = T extends `${infer L}${infer R}`
    ? U extends `${infer UL}${infer UR}`
        ? UL extends L
            ? StartsWith<R, UR>
            : false
        : true
    : U extends ''
    ? true
    : false;

最优解

type StartsWith<T extends string, U extends string> = T extends `${U}${any}`
    ? true
    : false;

在线演示

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章