首页 > 解决方案 > TypeScript - 在类型中存储元数据子类型而不影响类型

问题描述

我想知道是否可以在类型中存储一些类型元数据,以便可以使用类型函数提取它,而不会实际影响类型本身的值。

操场

type Meta1<T> = { meta: T }

type GetMeta1<T> = T extends Meta1<infer R> ? R : never;

type type1 = number | Meta1<string>; // should be just number
type meta1 = Meta1<type1> // ok

// I tried with never, but unfortunately it does not work
type Never<T> = never;
type Meta2<T> = Never<T>
type GetMeta2<T> = T extends Meta2<infer R> ? R : never;

type type2 = number | Meta2<string>; // ok
type meta2 = Meta2<type2> // never

// It's possible to create a type to get the required type value
type GetValue<T> = T extends Meta1<unknown> ? never : T;
type type3 = GetValue<number | Meta1<string>> // number

// But I'm specifically looking for a solution where GetValue does not have to be used
// A solution where the meta type can be somehow extracted, yet does not affect the
// main type in a practical way

标签: typescript

解决方案


推荐阅读