【问题标题】:Use object spread operator to construct function object with fields使用对象扩展运算符构造带字段的函数对象
【发布时间】:2017-11-04 14:28:00
【问题描述】:

我已经使用以下Object.assign 成功创建了一个带有附加字段的函数对象:

Object.assign((a) => {
        // Do something....
    }, {
        x: 10
    })

...通过对 typescript 接口的讨论:Implementing TypeScript interface with bare function signature plus other fields

但是,我发现 Object.assign 语法难以阅读,是否有 object spread operator 方法可以做到这一点?

简单地将函数和对象放在带有两个扩展的大括号中似乎并没有减少它:

{...(a) => a, ...{x: 10}}

它在 Typescript 中出现错误,并且似乎跳过了函数签名运行时。

编辑:

基本上我想做以下事情(使用打字稿类型标记):

interface IFunc {(a) : string}
interface IStruct {x: number}
type IInteresting = IFunc & IStruct

使用@icepickle 的{(a) => a, ...{x: 'y'}} 方法只会产生大量错误。似乎我必须强制将实例转换为目标类型,然后分配属性突变样式。

【问题讨论】:

  • 在仔细阅读 Object.assign 的 MDN 之后,它的第一个参数不是回调函数。我不确定你想用它实现什么
  • @user2340824 函数也可以分配属性:)。不知道{ (a) => a, ...{x: 10} }会不会剪了?

标签: javascript typescript ecmascript-next


【解决方案1】:

这是不可能的,因为当您使用展开属性时,结果将始终是一个普通对象。例如,如果您获取 Date 对象并尝试为其分配其他属性,您将得到一个普通对象而不是 Date 对象。

console.log({ ...new Date(), x: 10 } instanceof Date); // false

Try this in Babel REPL.

【讨论】:

    【解决方案2】:

    不,没有。对象扩展语法是对象文字的一部分,它总是创建(非函数)Object 对象。

    【讨论】:

      猜你喜欢
      • 2021-04-09
      • 2019-09-26
      • 1970-01-01
      • 2013-01-01
      • 2018-03-31
      • 2019-09-29
      • 2017-01-14
      • 2017-03-17
      • 1970-01-01
      相关资源
      最近更新 更多