Skip to content

33. Absolute #42

@astak16

Description

@astak16

题目

题目链接:Absolute答题

实现 Absoulte 类型,接收 stringnumberbigint 类型,返回一个整数字符串

import type { Equal, Expect } from "@type-challenges/utils";

type cases = [
  Expect<Equal<Absolute<0>, "0">>,
  Expect<Equal<Absolute<-0>, "0">>,
  Expect<Equal<Absolute<10>, "10">>,
  Expect<Equal<Absolute<-5>, "5">>,
  Expect<Equal<Absolute<"0">, "0">>,
  Expect<Equal<Absolute<"-0">, "0">>,
  Expect<Equal<Absolute<"10">, "10">>,
  Expect<Equal<Absolute<"-5">, "5">>,
  Expect<Equal<Absolute<-1_000_000n>, "1000000">>,
  Expect<Equal<Absolute<9_999n>, "9999">>
];

答案

下面三个方法的思路都是一样的

  • bigintnumber 类型通过 ${T} 可以变成 string 类型
    • 1_000_000n = "1000000"
  • 把负数变成正数
    • -{infer S}S 就是正数

方法一

type ToString<T extends string | number | bigint> = `${T}`;
type Absolute<T extends string | number | bigint> =
  ToString<T> extends `${infer P}${infer S}`
    ? P extends "-"
      ? S
      : ToString<T>
    : ToString<T>;

方法二

type ToString<T extends string | number | bigint> = `${T}`;
type Absolute<T extends string | number | bigint> = T extends string
  ? T extends `-${infer S}`
    ? S
    : T
  : Absolute<ToString<T>>;

方法三

type ToString<T extends string | number | bigint> = `${T}`;
type Absolute<T extends string | number | bigint> =
  ToString<T> extends `-${infer S}` ? S : ToString<T>;

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions