Sly 发表于 2025-7-8 11:40

TypeScript的所谓Type弄得这么变态么?

本帖最后由 Sly 于 2025-7-8 11:42 编辑

type Minus1<T extends number, C extends any[] = []> = [
1,
...C
]["length"] extends T
? C["length"]
: ["length"] extends T
? ["length"]
: Minus1<T, >;

type Number0= Minus1<1>

这么变态的且不谈,有人真的会用到所谓体操么?

xy. 发表于 2025-7-8 11:54

这个是 dependent type, 在类型系统中不算复杂的. 只是看起来长.

xy. 发表于 2025-7-8 11:56

给你翻译成 cpp 看起来就比较简洁了

#include <concepts>

using Zero = struct {};

template<typename>
struct Succ {};

template<auto x>
auto NatConstructor() {
    if constexpr (x == 0)
      return Zero{};
    else
      return Succ<decltype(NatConstructor<x - 1>())>{};
}

template<auto x>
using Nat = decltype(NatConstructor<x>());

auto main()->int {
    using One = Succ<Zero>;
    using Two = Succ<Succ<Zero>>;
    using Three = Succ<Succ<Succ<Zero>>>;

    using x = Nat<1>;
    using y = Nat<2>;
    using z = Nat<3>;
    using w = Nat<0>;

    static_assert(std::same_as<w, Zero>);
    static_assert(std::same_as<x, One>);
    static_assert(std::same_as<y, Two>);
    static_assert(std::same_as<z, Three>);
}

andyaldi 发表于 2025-7-8 19:02

还好吧,最近我们公司新上的项目都开始放弃ts了。维护起来,成本太高了,尤其是一帮二把刀的后端,返回的同一个field name,经常出现不同的类型,疯了,想咋写就咋写。
页: [1]
查看完整版本: TypeScript的所谓Type弄得这么变态么?