【发布时间】:2021-09-07 08:05:07
【问题描述】:
假设我们有以下输入类型:
interface Input {
name: string;
heightCm: number;
dob: Date;
}
我想写一个函数,可以根据这个输入产生以下输出类型:
interface Output {
name: boolean;
heightCm: boolean;
dob: boolean;
}
换句话说,一个复制输入结构并将该结构作为输出返回的函数,将所有值设置为布尔值。
函数签名看起来像这样:
interface GenericMap<T> {
[key: string]: T;
}
type InputToOutput<In, Out extends GenericMap<boolean>> = (input: In) => Out;
如果Input属性的类型最初是字符串,则将该属性标记为true,否则标记为false。
例如该函数将根据上面的Input 产生以下结果:
{
name: true,
heightCm: false,
dob: false
}
但最重要的是,它需要是类型安全的,这样我才能在结果对象上接收智能感知。
帮助不胜感激!
【问题讨论】:
-
我不确定您是否只是在寻找mapped types,或者您真的想要具有尽可能强类型的完整实现,例如this。该代码是否满足您的需求,还是您想要别的东西?
标签: javascript typescript typescript-generics