没有强制转换的 TypeScript

标签 typescript casting

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

相关文章:

javascript - 如何使用 Angular 8 在选择元素中取消选择选定的选项元素

reactjs - React 无状态组件的 TypeScript 返回类型是什么?

Java泛型字段

c++ - 根据类型特征专门化强制转换运算符

python - 在 pandas 数据框查询中转换类型的任何方法?

reactjs - 如何使用 TypeScript 验证与 Axios GET 响应的接口(interface)

javascript - 在 typescript 中使用 Angular 传单指令的步骤

在在线正则表达式测试人员中工作时,正则表达式无法在 Angular Validators.pattern() 中工作

c++ - 不完整的类 : Convert void* to pointer to class type via dynamic_cast

在 C 中转换 Void 函数