【问题标题】:Typescript: Return a reference object that can be assigned to?打字稿:返回可以分配给的参考对象?
【发布时间】:2022-01-18 22:03:35
【问题描述】:

我有一组现有的类,它们有许多获取点和一个设置点,一个来自数组的命名属性,即

return object[index];
// or
object[index] = newValue;

由于一个现有的模块做事不同于其他任何地方,我不得不更新这些以采用一个函数,该函数可以选择定义替代方法来获得适当的值:

varAccessFunction: (obj: T, index: string) => any
// For example:
varAccessFunction = (obj: { [key: string]: AbstractControl; }, index: string): any => obj[myFields.find(item => item.variableName === index)?.displayName!].value;

在重新连接所有类以获取 getter 后,我心不在焉地尝试将它也用于 setter,并得到错误:The left-hand side of an assignment expression must be a variable or a property access. 好吧,好吧,是的,我显然不能为值赋值.因此,我将不得不返回层并使用set 函数将所有构造函数线程化以匹配get 函数,以便在一个地方使用几乎相同的表达式。

除非。

有没有办法指定这个函数返回一个可以赋值的参考值?在 C++ 或其他东西中返回显式引用会很容易,但在 Typescript 中,值都将是基元,它们是值类型。我没有看到在 Typescript 中返回对原语的引用的方法,但也许我遗漏了什么?

【问题讨论】:

  • Typescript = Javascript + 类型注释。如果你不能用 Javascript 做,那么你也不能用 Typescript 做。

标签: typescript return-value variable-assignment


【解决方案1】:

JavaScript 中没有内置的“参考值”。像 Vue 这样的框架引入了他们自己的 refs 概念,它包装了一个可能的原始值来跟踪和传播其“获取”和“设置”操作。

这很容易作为具有get 和set 方法的类公开,其中get 使用多个参数实现您的varAccessFunction,而set 则相反。与 Vue 一样,您也可以使用 getter 和 setter 将接口表示为值属性(可能命名为“值”)的函数来实现这一点;大概您会将索引放入varAccessFunction 并返回一个准引用,该准引用知道如何获取并将其值设置回其实际的真实来源。

这不是您要寻找的,因为您仍然需要定义一个对象并使用某种点访问属性的 JavaScript 来调度您的自定义设置器,但除了必要的 .value (等)您将获得类似引用的行为,而无需额外的框架或聪明才智。

这也回退到一个简单的 { value: "foo" } 对象作为其最小的假实现,这可能有助于单元测试。

【讨论】:

    猜你喜欢
    • 2022-08-18
    • 2018-06-13
    • 2022-12-02
    • 2018-11-17
    • 2021-06-29
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多