gpt4 book ai didi

没有强制转换的 TypeScript

转载 作者:搜寻专家 更新时间:2023-10-30 21:17:25 25 4
gpt4 key购买 nike

我已经编写 TypeScript 代码几年了。我已经看到它在每个版本中都有如此大的发展和改进。尽管如此,所有这些静态类型的完美都因强制转换而分崩离析。

尽管用 TypeScript 编写了很多代码,但我仍然不明白如何在生成对象转换的函数中避免强制转换

如以下示例所示:我想将一个对象作为输入,并返回该对象的转换副本作为输出。

function stringifyProperties<T>(obj: T): { [P in keyof T]: string } {
let stringified: { [P in keyof T]: string } = {} as any;

for (let k in obj)
stringified[k] = JSON.stringify(obj[k]);

return stringified;
}

as any cast 确实打破了咒语,但我找不到避免它的方法。有可能吗?

谢谢!

最佳答案

在 TypeScript 中,真正的问题不是由它自己转换,而是特别是丢失所有类型信息和静态检查的 any 类型。为避免对累加器使用 any-casts,您可以将它们标记为结构的 Partial 应用程序,当您确定这些已完成时,将其强制转换为完整对象而不用“任何”中间无类型状态。

在您的情况下,我会使用以下解决方案:

type StringifiedProps<T> = { [P in keyof T]: string; };
function stringifyProperties<T>(obj: T): StringifiedProps<T> {
const stringified: Partial<StringifiedProps<T>> = {};

for (const k of Object.keys(obj) as Array<keyof T>) {
stringified[k] = JSON.stringify(obj[k]);
}

return stringified as StringifiedProps<T>;
}

关于没有强制转换的 TypeScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48983573/

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