javascript - 使用对象扩展运算符构造带字段的函数对象

标签 javascript typescript ecmascript-next

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

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

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

但是,我发现 Object.assign 语法难以阅读,是否有对象扩展运算符方法来执行此操作?

简单地将函数和对象放在带有两个跨度的大括号中似乎并不能解决问题:

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

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

编辑:

基本上我想执行以下操作(使用 typescript 类型标记):

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

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

最佳答案

这是不可能的,因为当你使用扩展属性时,结果总是一个普通对象。例如,如果您使用一个 Date 对象并尝试为其分配额外的属性,您将得到一个普通对象而不是一个 Date 对象。

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

Try this in Babel REPL .

关于javascript - 使用对象扩展运算符构造带字段的函数对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44341426/

相关文章:

angular - 在带有 *ngFor 的 Angular 2 模板中使用可观察对象

javascript - JS 装饰器的 ESLint 意外字符 '@'

javascript - Object.assign(...array) 的替代方案

javascript - 使用 create-react-app 创建应用程序时出现 React 和 Bootstrap4 问题

javascript - Google 表格自定义脚本

javascript - 使用 thymeleaf 获取 JS 文件中的图像

css - 如何添加垂直面板并将其用作 Angular 中的切换器?

javascript - 仅在 javascript 数组存在时调用函数,否则返回空数组

typescript - 如何从 Typescript 的接口(interface)中提取 "string"属性名称?

javascript - JavaScript 中的私有(private) (#) getter