javascript - 流式类型转换
问题描述
我正在尝试编写以下代码行,这些代码应该采用类型对象ClientRect | DOMRect
并将其转换为更易于使用的东西。
(ClientRect
使用left
和top
,而DOMRect
使用x
和y
)
type Bounds = {|
x: number,
y: number,
width: number,
height: number,
|}
function getLocation() => {
//ref denote a reference to an HTMLElement
const rect = ref.current ? ref.current.getBoundingClientRect() : ({ height: 0, width: 0, x: 0, y: 0 }: Bounds);
if(rect.x!==undefined && rect.y!==undefined) {
return ({
x: rect.x,
y: rect.y,
width: rect.width,
height: rect.height,
}: Bounds);
} else {
return ({
x: rect.left,
y: rect.top,
width: rect.width,
height: rect.height,
}: Bounds);
}
}
在前面的代码中,ref
是对一个 HTMLElement 的引用。
getBoundingClientRect()
返回一个ClientRect | DOMRect
类型定义如下的对象:
interface ClientRect {
bottom: number;
readonly height: number;
left: number;
right: number;
top: number;
readonly width: number;
}
interface DOMRect extends DOMRectReadOnly {
height: number;
width: number;
x: number;
y: number;
}
但是使用这段代码,我从流程中得到:
Cannot get `rect.y` because property `y` is missing in `ClientRect`
Cannot cast object literal to `Bounds` because property `x` of unknown type [1] is incompatible with number [2] in property `x`
那么如何创建一个函数,Bounds
从返回的对象中给我一个类型的对象getBoundingClientRect()
呢?
解决方案
Cannot get `rect.y` because property `y` is missing in `ClientRect`
就像错误所说的那样,您需要将 x 和 y 添加到 ClientRect
interface ClientRect {
bottom: number;
readonly height: number;
left: number;
right: number;
top: number;
readonly width: number;
x: number,
y: number
}
推荐阅读
- php - 如何编写正确的查询构建?我被困住了
- python - 通过两个函数python维护一个列表
- python - Scape span,在 DIV 中使用 Python
- python - Pandas 的时间序列/不同组的先前值的累积平均值(不同组的滞后变量)
- c# - 使用 Azure 服务总线实现事件总线
- python - 如何在 Python 中将字符串转换为其 8 位 ASCII 形式?
- google-apps-script - 将 onEdit 与 Google 表格共享电子表格一起使用,该表格从一张表格中收集信息并在另一张表格中设置值,同时限制其他用户
- react-native - React Native 异步等待调用返回错误
- javascript - 如何使用 javascript 在 mvc 项目中播放 mp3 文件?
- phpstorm - 将键盘快捷键分配给 PhpStorm 中的“编辑手表..”快捷键