给出以下代码:
interface A {
readonly value: number;
}
function f(a: A) {
if (a.value === 1) {
// compiler error that 2 cannot be assigned to a
// a = 2;
// no compiler error
a = 2 as unknown as A;
// a.value will now return 2
}
}
是否可以在没有显式强制转换的情况下隐式地进行接口A和数字之间的转换?基本上在A接口上添加一些类型信息,说可以始终为该类型分配一个数字吗?
我的JavaScript在支持操作符重载的非标准环境(Salesforce Commerce Cloud /需求软件)中运行,因此为该属性分配一个数字最终会为该属性创建一个新对象-实际上并未将属性本身更改为一个数字(因此以后您仍然可以将属性作为原始对象类型读取)。
如果我可以说函数参数“ a”在读取时是接口A,但在写入/分配时是数字,那也可以工作-但可以肯定的是,还不可能,请为读取/写入使用单独的类型。
很抱歉,如果已经问过或问错了地方。我发现与此相关的所有对话都是希望TypeScript能够支持此类事情的运行时代码的人们。我不想更改我的运行时代码或添加任何新功能,我只想能够正确定义现有的运行时代码已经在做什么。