Skip to content

Latest commit

 

History

History

0116-Replace-medium

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

0116 Replace

关键词: TypeScript, TypeChallenge

实现Replace<S, From, To>类, 该类接受三个字符串类型, 将S串中的From修改为To并返回

举个栗子:

type replaced = Replace<"types are fun!", "fun", "awesome">; // expected to be 'types are awesome!'

答案

type Replace<S, F extends string, T extends string> = S extends `${infer L}${F}${infer R}`
  ? `${L}${T}${R}`
  : S;

分析

我们将S拆分成 左, 匹配, 右 三个部分, 并返回 左, 替换, 右 的拼接即可

通过模板字面量+infer的语法, 我们可以很轻松的实现

// 注意`F extends string, T extends string`中 `extends string`是必须的, 否则无法在模板中使用
type Replace<S, F extends string, T extends string> = S extends `${infer L}${F}${infer R}`
  ? `${L}${T}${R}`
  : S;