Typescript ';名称';当类型既可索引又可调用时的属性
我有这样一种类型:Typescript ';名称';当类型既可索引又可调用时的属性,typescript,Typescript,我有这样一种类型: 接口MyInterface{ (键?:字符串):MyReturnType; 只读[键:字符串]:MyReturnType; } 因此,instance('foo')和instance.foo都是可能的 我还需要访问name属性(即实例。name是MyReturnType),但这与内置属性冲突,因此TypeScript将其识别为字符串 我尝试了各种选择,但如果不在MyInterface中声明一个显式的name属性,我就找不到绕过它的方法(这很痛苦,因为我希望所有属性都是MyR
接口MyInterface{
(键?:字符串):MyReturnType;
只读[键:字符串]:MyReturnType;
}
因此,instance('foo')
和instance.foo
都是可能的
我还需要访问name
属性(即实例。name
是MyReturnType
),但这与内置属性冲突,因此TypeScript将其识别为字符串
我尝试了各种选择,但如果不在MyInterface
中声明一个显式的name
属性,我就找不到绕过它的方法(这很痛苦,因为我希望所有属性都是MyReturnType
)。可能吗?这是虫子吗
参考资料。注意,我正在为现有NPM库()添加类型,而不是编写实现。这是在描述代理还是什么?如果您有一个类型为myInterface
的值myInterface
,那么运行时typeofmyinterface
不是“函数”
?在任何情况下,我认为唯一的方法是手动指定任何类型与函数
和对象
中的“默认”类型冲突的属性。不过我还是怀疑。。。您想要myInterface.apply
成为MyReturnType
?或者myInterface.toString
?怎么样myInterface.constructor
?@jcalz是的,它是一个代理
。为了确认,它们都需要被重写()。那么,我认为TypeScript不想让这变得容易。打破类型期望的代理不是优化语言的用例。对于任何名为schema
的合理值,code(schema |{}).toString()
应该生成一个字符串
,但在提供的示例中,我们会得到一个运行时错误,因为toString
不是一个函数。要告诉TypeScript不同的情况并非不可能,但不管是好是坏,这都是乏味的。