我想创建一个类,将一些基本类型包装成另一个基本类型,例如:

class MyClass<T> {
    foo? : T
}

type Input = [string, number, boolean]

type Remap<T> = MyClass<T>

type Output = Remap<Input>  // <-- Now it's MyClass<Input>
// Can I make the Remap to infer an Output as the following?
// type Output = [MyClass<string>, MyClass<number>, MyClass<boolean>]

但是,如果可行的话,我不知道如何创建适当的重映射类型以使输出符合我的预期.

Playground

推荐答案

是的,事实上这可以用一个普通的mapped type来完成:

type Remap<T> = { [I in keyof T]: MyClass<T[I]> }

type Output = Remap<Input>
//   ^? type Output = [MyClass<string>, MyClass<number>, MyClass<boolean>]

作用于keyof T的映射类型,其中T是自动transform arrays to arrays and tuples to tuples的泛型类型参数.

Playground link to code

Typescript相关问答推荐

Typescript:将内部函数参数推断为子对象键的类型

如果在TypeScript中一个原始的类方法是递归的,如何使用类decorator 模式?

使某些类型的字段变为可选字段'

如何使用函数填充对象?

APIslice-CreateAPI的RTK打字错误

TS2339:类型{}上不存在属性消息

一个打字类型可以实现一个接口吗?

扩展参数必须具有元组类型或传递给REST参数

如何使所有可选字段在打印脚本中都是必填字段,但不能多或少?

使用条件类型的类型保护

有没有办法取消分发元组的联合?

如何将对象数组中的键映射到另一种对象类型的键?

从非文字数组(object.keys和array.map)派生联合类型

如何从对象或类动态生成类型

使用ngfor循环时,数据未绑定到表

如何在Angular /字体中访问API响应的子元素?

为什么`map()`返回类型不能维护与输入相同数量的值?

TypeScript中的这些条件类型映射方法之间有什么区别?

React-跨组件共享功能的最佳实践

如何强制对象数组中的对象属性具有非空字符串值?