Typescript将数组类型展平为不在Mapped types中工作的元素类型



我的用户类型如下

interface IUserMongo {
name: string;
age: number;
address: string[];
nested: {
name: string;
sayYes: boolean;
rrr: 1;
};
}

我想导出以下类型的

interface IUserMongo {
name: number;
age: number;
address:number;
nested: {
name: number;
sayYes: number;
rrr: number;
};
}

除了数组之外,代码都在工作。

错误:类型"number"不可分配给类型"number[]">

ts游乐场链接

interface IUserMongo {
name: string;
age: number;
address: string[];
nested: {
name: string;
sayYes: boolean;
rrr: 1;
};
}
type IUserProject<T, N = number> = {
[K in keyof T]: T[K] extends object ? IUserProject<T[K], N> : N;
};
const projection: IUserProject<IUserMongo> = {
name: 1,
age: 1,
address: 1,
nested: {
sayYes: 1,
name: 1,
rrr: 1,
},
};
const user: IUserMongo = {
name: 'sdg',
age: 1,
address: ['gfg'],
nested: {
sayYes: true,
name: 'rrr',
rrr: 1,
},
};
// this is the behavior i want
interface MultiContainer {
Item1: string[];
Item2: number[];
}
type SingleContainer = { [P in keyof MultiContainer]: number };
const tt: SingleContainer = {
Item1: 1,
Item2: 1,
};

检查它是否是一个数组:

type IUserProject<T, N = number> = {
[K in keyof T]: T[K] extends object ? T[K] extends ReadonlyArray<unknown> ? N : IUserProject<T[K], N> : N;
};

现在工作

最新更新