使用对象扩展运算符构造带有字段

时间:2017-06-03 07:15:45

标签: javascript typescript ecmascript-next

我使用以下Object.assign成功创建了一个包含其他字段的函数对象:

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

...通过讨论打字稿界面:Implementing TypeScript interface with bare function signature plus other fields

然而,我发现Object.assign语法难以阅读,是否有对象扩展运算符这样做?

简单地将函数和对象放在带有两个点差的大括号中似乎不会削减它:

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

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

编辑:

基本上我想做以下事情(使用typescript type-markup):

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

这是不可能的,因为当您使用spread属性时,结果将始终是普通对象。例如,如果您使用adapter.setFilter(filteredModelList);对象并尝试为其分配其他属性,则将获得普通对象而不是Date对象。

Date

Try this in Babel REPL