对TypeScript来说很新,并且一直在VSCode中编写它。 VSCode为我突出显示类型“错误”,我已经大量依赖它来捕捉我的错误。我不确定这是否是TSLint的一部分或它是做什么或如何做的。
然而,有一种类型的“错误”,我发现它不捕获。我希望我的类有一个属性,它是一个在某个时候被调用的处理函数。另一个对象将传入此处理程序以便稍后调用。
我正在键入此属性以具有某个调用签名和返回类型。如果我尝试将此属性设置为不同调用签名的函数,VSCode会突出显示错误。但是,如果我尝试将此属性设置为具有错误的返回类型的函数,则它不会捕获它。
最好用最小的例子来证明:
class Student {
private enroller : () => Course
constructor(){
this.enroller = function() { return(this); }
}
}
class Course {
public courseNumber : number;
constructor(){
}
}
现在,Student的构造函数将Student的enroller属性设置为返回错误类型的函数。注册器应该是传递课程的函数。但是,我可以将它设置为一个传回自身(Student类)的函数。
是否有配置TS / VSCode突出显示此类错误?
老实说,不确定TSLint是什么以及它是否在后台运行以突出显示这些语法错误,或者它是否必须作为单独的任务运行。
感谢。
答案 0 :(得分:1)
您遇到的问题是在常规函数中使用function
而不是箭头函数(=>
),除非另有说明,this
的类型为any
。因此,您定义的函数返回any
并将其分配给预期返回Course
的函数。但由于any
可以分配给任何东西,编译器允许这样做(例如var something: any; var c: Course = something;
有效)
我认为代码实际上没有您想要的行为。如果您想像当前对象一样返回this
,那么您应该使用箭头函数,这会导致错误(this.enroller = ()=> this;
)。在你的代码中,因为没有人为你的匿名函数指定谁this
,它可能是窗口对象。
为了保护自己免受此类错误的影响,您可以启用noImplicitThis
编译器标志,这不会将this
键入任何内容,并且可以避免此问题。