我已经编写 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/