gpt4 book ai didi

typescript :将对象属性和嵌套对象属性的类型更改为一种类型

转载 作者:行者123 更新时间:2023-12-04 16:38:04 25 4
gpt4 key购买 nike

举个例子:

interface Event {
title:string;
description:string;
fromDate: Date;
toDate: Date;
location: {
name: string;
lat: number;
long: number;
}
}

使用类似于 PropertiesToString<Event> 的类型我希望返回这种类型:

{
title:string;
description:string;
fromDate: string;
toDate: string;
location: {
name: string;
lat: string;
long: string;
}
}

问题是如何创建 PropertiesToString<T>输入?

我已经设法创建了一些适用但不适用于嵌套对象的东西。如果我有一个嵌套对象而不是将对象属性修改为字符串,它会将对象设置为字符串。

这是我的版本,它不适用于嵌套对象,因为不是更改 location properties to string 的类型,它会更改 location itself to string 的类型:

export type RequestBody<T> = {
[P in keyof T]: string;
};

最佳答案

type ToString 将给定类型转换为 stringPropertiesToString 遍历所传递类型的每个键,并使用 ToString 将其类型更改为 string。您可以使用类型三元运算符在 ToString 中添加您想要处理的其他特殊情况。

interface Event1 {
title: string;
description: string;
fromDate: Date;
toDate: Date;
location: {
name: string;
lat: number;
long: number;
}
}

type ToString<T> = T extends Date
? string
: T extends object
? PropertiesToString<T>
: string

type PropertiesToString<T> = {
[K in keyof T]: ToString<T[K]>
}

type Generated = PropertiesToString<Event1>

type X = PropertiesToString<Event1['location']>

const x: Generated = {
title: 'lorem',
description: 'lorem',
fromDate: 'lorem',
toDate: 'lorem',
location: {
name: 'lorem',
lat: 'lorem',
long: 'lorem',
}
}

Playground

关于 typescript :将对象属性和嵌套对象属性的类型更改为一种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66751146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com