Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript ';名称';当类型既可索引又可调用时的属性_Typescript - Fatal编程技术网

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不同的情况并非不可能,但不管是好是坏,这都是乏味的。