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