TypeScript赢得';我不允许算术运算符,但我不允许';我不明白为什么

TypeScript赢得';我不允许算术运算符,但我不允许';我不明白为什么,typescript,numbers,Typescript,Numbers,为什么TypeScript在这种情况下给出了运算符“+”不能应用的错误?数字类型基本上没有变化。我遇到了一个不寻常的编码情况,我想删除number上的内置方法,比如toExponential,但希望数学运算符仍然有效。有没有什么“布拉格语”或什么东西可以让这一切顺利进行 let x: Omit<number, 'banana'> = 1; let y: Omit<number, 'banana'> = 2; let z = x + y; 设x:Omit=1; 设y:Om

为什么TypeScript在这种情况下给出了
运算符“+”不能应用的错误?数字类型基本上没有变化。我遇到了一个不寻常的编码情况,我想删除
number
上的内置方法,比如
toExponential
,但希望数学运算符仍然有效。有没有什么“布拉格语”或什么东西可以让这一切顺利进行

let x: Omit<number, 'banana'> = 1;
let y: Omit<number, 'banana'> = 2;
let z = x + y;
设x:Omit=1;
设y:Omit=2;
设z=x+y;

该+运算符不适用于该类型。规范中的相关章节:

4.19.2+运算符

二进制+运算符要求两个操作数均为数字基元类型或枚举类型,或至少为 至少有一个操作数的类型为Any或字符串基元类型。枚举类型的操作数是 被视为具有原始类型编号。如果一个操作数是空值或未定义值,则将对其进行处理 84 具有另一个操作数的类型。如果两个操作数都是数字基元类型,则结果为 基本类型的数字。如果一个或两个操作数都是字符串基元类型,则结果为 字符串基元类型。否则,结果为Any类型

(强调矿山)


来源:

“我遇到了一个不寻常的编码情况,我想删除数字上的内置方法……但希望数学运算符仍然有效”为什么?如果您正在尝试进行大量的数字运算,并且希望使用未装箱的算术(将在JS中执行此操作的可取性放在一边一分钟,甚至考虑JIT是否会为您取消装箱)您最好将C编译成wasm。Google Firebase server的安全规则是用一种非常类似于javascript的语言编写的,并且没有很好的代码编辑器。所以我试图在本地用TypeScript编写它们,并试图隐藏在其他环境中不可用的原语上的方法。然后我将复制/粘贴我的代码。它们为该语言提供了一个。为您选择的编辑器找到甚至编写插件可能比以这种特殊方式弯曲Typescript的类型系统更容易。这是一个很好的方法,可以在解析方面进行一些实际的练习,并帮全世界(或者至少是你最喜欢的文本编辑器的用户)一个忙。但是通过“duck typing”,我对数字类型没有任何改变?但它不再是原始的数字类型。我不明白。我认为typescript使用duck类型,数据的形状应该完全相同,因为我省略了一个不存在的属性。类型
'Pick'
不是一个基本类型,它与类型
'number'
非常不同。