typescript - TypeScript:为什么我不能删除这种类型断言?
问题描述
为什么这段代码无法编译?
interface TaggedProduct {
tag: string;
}
interface Product {
tag?: string;
}
const tagProduct = (product: Product): TaggedProduct => {
const tag: string = "anything";
product.tag = tag;
// Type 'Product' is not assignable to type 'TaggedProduct'.
// Property 'tag' is optional in type 'Product' but required in type 'TaggedProduct'.ts(2322)
return product; // Won't compile
}
我认为,如果您将一个tag
字段添加到 a Product
,您一定有一个TaggedProduct
. 为什么 TypeScript 不这么认为?我可以在没有类型断言的情况下解决这个问题吗?
解决方案
您可以使用Object.assign
来避免类型断言:
const tagProduct = (product: Product): TaggedProduct => {
const tag: string = "anything";
return Object.assign(product, {tag});
}
这是因为Object.assign
是这样输入的:
interface ObjectConstructor {
assign<T, U>(target: T, source: U): T & U;
}
所以返回类型Product & {tag: string}
可以分配给TaggedProduct
。
推荐阅读
- javascript - 如何遍历 Vue 组件的子组件
- jakarta-ee - 在 Websphere 上实现 Jaeger 开放式跟踪
- java - 要接受 -d @json ,在 rest api 中应该如何写 put 方法
- javascript - parseFloat 将摄氏温度的 NaN 返回到华氏温度
- sql - ORACLE:AND 运算符的替代方案
- django - 托管在同一台服务器上的 Django 和 React 的 CORS 问题
- node.js - babel-node,无法让服务器监听端口
- java - Spring批处理JPAItemReader性能问题
- java - 如何从第一个开始使用源代码一个接一个地运行一个单曲
- python - 如何使用 OpenCV 和 Flask 从客户端捕获视频/图像?