Office js 为什么有任何价值观[][]

Office js 为什么有任何价值观[][],office-js,Office Js,我有一个关于office js设计决策的快速问题,特别是Excel 我最近遇到了一个bug,它的根本原因是TypeScript中的any的动态特性(值得注意的是,它只是禁用了类型检查)。我假设Excel.Range.values中的值是字符串,而实际上它是一个数字。这让我思考:为什么值的类型是any[][]?显式声明“返回的数据可以是字符串、数字或布尔类型。”对我来说,这表示更正确的类型应该是(string | number | boolean)[] 这一决定背后的原因是什么?这是历史原因和现实

我有一个关于office js设计决策的快速问题,特别是Excel

我最近遇到了一个bug,它的根本原因是TypeScript中的
any
的动态特性(值得注意的是,它只是禁用了类型检查)。我假设
Excel.Range.values
中的值是
字符串
,而实际上它是一个
数字
。这让我思考:为什么值的类型是any[][]?显式声明“返回的数据可以是字符串、数字或布尔类型。”对我来说,这表示更正确的类型应该是
(string | number | boolean)[]


这一决定背后的原因是什么?

这是历史原因和现实原因的结合

历史原因是当
Range.values
API大约在2016年首次发布时,TypeScript中还没有类型联合的概念。因此,描述“字符串、数字或布尔值”的唯一方法是使用
any
。而对像
(字符串|数字|布尔值)[]
这样的东西进行更改将是一个突破性的改变(大量的红色曲线、连续的积分破坏等)

实际原因是即使
(字符串|数字|布尔值)[[]]
更准确,也不一定更有用。考虑今天可以编写的代码,当值被键入为<代码> []][COD> >代码>:/P>
console.log(range.values[0][0] * 2);
如果将值键入为
(字符串|数字|布尔值)[[]
,您现在将得到一个错误:

算术运算的左侧必须是“any”、“number”、“bigint”或枚举类型

在大多数自动化场景中,我认为您已经知道希望获得的值(即,所讨论的
范围
可能是您之前写入内容的地方,因此您知道它是一个数字)。但现在仍然需要显式地强制转换值:

console.log(range.values[0][0] as number * 2);
出于我个人的偏好,我实际上仍然会咬紧牙关,处理演员阵容(也就是说,我仍然更喜欢
(string | number | boolean)[[]]
)。但结合历史原因,有无数行代码和无数回购协议会突然被这一变化打破,我认为这是一个变化,需要作为一个更大的突破性变化的一部分,明确的版本号变化,而不是在d.T.中逐步引入的东西


如果你不这么想,我很想听听你的意见。

我不知道历史原因(我是打字新手),这是一个很大的原因!我也同意你的评估,在很多情况下,工会的可用性会稍差一些,但我个人还是更喜欢它。也许在2.0中:)回答得很好,谢谢。