使用对象扩展运算符构造带字段的函数对象
Use object spread operator to construct function object with fields
我已经使用以下 Object.assign
:
成功创建了一个带有附加字段的函数对象
Object.assign((a) => {
// Do something....
}, {
x: 10
})
...通过对打字稿接口的讨论: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
对象。
这是不可能的,因为当你使用扩展属性时,结果总是一个普通对象。例如,如果您使用 Date
对象并尝试为其分配额外的属性,您将得到一个普通对象而不是 Date
对象。
console.log({ ...new Date(), x: 10 } instanceof Date); // false
我已经使用以下 Object.assign
:
Object.assign((a) => {
// Do something....
}, {
x: 10
})
...通过对打字稿接口的讨论: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
对象。
这是不可能的,因为当你使用扩展属性时,结果总是一个普通对象。例如,如果您使用 Date
对象并尝试为其分配额外的属性,您将得到一个普通对象而不是 Date
对象。
console.log({ ...new Date(), x: 10 } instanceof Date); // false