跳至主要內容

116. Replace

鸭梨2023年5月28日小于 1 分钟

116. Replace

<题目描述>

::: playground#ts 116. Replace

@file index.ts

// ============= Test Cases =============
import type { Equal, Expect } from '@type-challenges/utils'

type cases = [
  Expect<Equal<Replace<'foobar', 'bar', 'foo'>, 'foofoo'>>,
  Expect<Equal<Replace<'foobarbar', 'bar', 'foo'>, 'foofoobar'>>,
  Expect<Equal<Replace<'foobarbar', '', 'foo'>, 'foobarbar'>>,
  Expect<Equal<Replace<'foobarbar', 'bar', ''>, 'foobar'>>,
  Expect<Equal<Replace<'foobarbar', 'bra', 'foo'>, 'foobarbar'>>,
  Expect<Equal<Replace<'', '', ''>, ''>>,
]

// ============= Your Code Here =============
type Replace<S extends string, From extends string, To extends string> = any

:::

点击查看答案
type Replace<
  S extends string,
  From extends string,
  To extends string
> = From extends '' ? S :
  S extends `${infer L}${From}${infer R}` ?
  `${L}${To}${R}` : S