假设我们有以下输入类型:
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
above:
{
name: true,
heightCm: false,
dob: false
}
但最重要的是,它需要是类型安全的,以便我可以在结果对象上接收智能感知。
帮助非常感谢!
我认为您只是想要一个将每个属性的类型设置为布尔值的映射类型?
type GenericMap<T> = {
[K in keyof T]: boolean
}
你会这样使用:
interface Input {
name: string;
heightCm: number;
dob: Date;
}
type Output = GenericMap<Input>
// Output is
// {
// name: boolean;
// heightCm: boolean;
// dob: boolean;
// }
操场
作为(潜在的)改进,您甚至可以检查string
在此类型别名中并返回true
or false
, 而不是boolean
.
type GenericMap<T> = {
[K in keyof T]: T[K] extends string ? true : false
}
这会产生这种类型:
type Output = GenericMap<Input>
// {
// name: true;
// heightCm: false;
// dob: false;
// }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)