首页 > 编程学习 > Typescript类型体操 - StartsWith

Typescript类型体操 - StartsWith

发布时间:2022/9/21 0:57:33

题目

中文

实现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;

在线演示

Copyright © 2010-2022 mfbz.cn 版权所有 |关于我们| 联系方式|豫ICP备15888888号