TypeScript:抽象属性在子类中缺少类型信息

TypeScript:抽象属性在子类中缺少类型信息,typescript,Typescript,我使用的是TypeScript 3.4,下面的代码有一个奇怪的问题 接口MyInterface{ fn:(x:编号)=>编号; } 抽象A类{ 抽象属性:MyInterface; } B类扩展了A类{ prop={fn:x=>x};//抱怨x在这里有隐式any } TypeScript抱怨我的函数有一个隐式的any参数。现在当我这样写B类的时候 B类扩展了A类{ prop:MyInterface={fn:x=>x};//不再抱怨了! } 问题消失了,TypeScript知道x是一个数字。通常

我使用的是TypeScript 3.4,下面的代码有一个奇怪的问题

接口MyInterface{
fn:(x:编号)=>编号;
}
抽象A类{
抽象属性:MyInterface;
}
B类扩展了A类{
prop={fn:x=>x};//抱怨x在这里有隐式any
}
TypeScript抱怨我的函数有一个隐式的any参数。现在当我这样写B类的时候

B类扩展了A类{
prop:MyInterface={fn:x=>x};//不再抱怨了!
}
问题消失了,TypeScript知道
x
是一个数字。通常,TypeScript知道我的示例中的
prop
属于
MyInterface
类型,但对于函数,它不能正常工作

谁能解释一下我做错了什么?这是重现该问题的最小示例。在我的实际代码中,我将所有内容拆分为不同的文件,并且必须为抽象类的每个实现导入相应的
MyInterface
,同时应该对其进行推断。

这是一个,已关闭为“不会修复”。您的期望是
类B扩展了
B
的A
将属性初始值设定项约束为
A
的相应属性的类型,但这并没有真正发生

有,但显然它破坏了太多现有代码,不值得这么做

不幸的是,我们无法提出一个既一致又向后兼容的解决方案。我们现实世界的代码套件中出现的中断与其说是好的,不如说是坏的

看来你得手动打字了。避免导入属性类型名称的一种方法是使用如下所示的名称:

class B extends A {
  prop: A['prop'] = { fn: x => x }
}
在这种情况下,类型
A['prop']
被解析为
MyInterface


不管怎样,希望这有帮助。祝你好运。

我能够用你的最小代码示例重现问题。您是否查阅了Typescript文档以获取解释?感谢您提供了如此多的详细信息!查找类型无疑缓解了我的主要痛点:)