我想创建一个满足此类型的对象:
interface I {
(): string;
[x: string]: number;
}
并通过 TypeScript 类型检查。理想情况下,我希望不需要诉诸技巧,例如使用any
作为中间步骤。
我知道可以将其他字段添加到具有调用签名的接口中,如下所述:使用裸函数签名和其他字段实现 TypeScript 接口 https://stackoverflow.com/questions/16508435/implementing-typescript-interface-with-bare-function-signature-plus-other-fields.
我尝试写:
const foo: I = Object.assign(
// Callable signature implementation
() => 'hi',
{
// Additional properties
text2: 3
}
)
但我收到错误:Type '(() => "hi") & { text2: number; }' is not assignable to type 'I'. Index signature is missing in type '(() => "hi") & { text2: number; }'.
我很想知道是否有办法创建一个实现接口的对象I
.
如果您不将类型定义为接口而是交集类型的类型别名,则无需断言即可执行此操作:
type I = {
(): string;
} & {
[x: string]: number;
}
// Will work
let d:I= Object.assign(function() { return ""}, {
text: 10
});
不确定为什么一个有效而另一个无效,它们的公共结构本质上是相同的,这可能是编译器错误。
Edit提交了一份bug https://github.com/Microsoft/TypeScript/issues/23226我们得等待回复
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)