Javascript 如何获得;这";键入打字脚本
我想要的是,它作为返回类型来表示当前类,即a的子类a。因此,方法只返回与类相同类型的值(不仅仅是基类a)Javascript 如何获得;这";键入打字脚本,javascript,typescript,types,typescript-typings,typescript-generics,Javascript,Typescript,Types,Typescript Typings,Typescript Generics,我想要的是,它作为返回类型来表示当前类,即a的子类a。因此,方法只返回与类相同类型的值(不仅仅是基类a) 我想我也有类似的想法: class A { method : this = () => this; } A类{ 方法:()=>T=()=>this; } 但这似乎是多余的。我复制了A。当然有更好的方法可以做到这一点吗?。您几乎就知道了,方法属性的类型应该声明为()=>this,而不仅仅是this。编译器理解,当用作类型时,此是 为什么this会返回a的子类;根据定义,此<
我想我也有类似的想法:
class A {
method : this = () => this;
}
A类{
方法:()=>T=()=>this;
}
但这似乎是多余的。我复制了
A
。当然有更好的方法可以做到这一点吗?。您几乎就知道了,方法
属性的类型应该声明为()=>this
,而不仅仅是this
。编译器理解,当用作类型时,此
是
为什么
this
会返回a的子类;根据定义,<代码>此< /代码>表示执行上下文——在上面的代码的情况下,即,在第二个示例中,执行上下文仍然是A,所以返回<代码>此< /代码>将返回。请考虑阅读:@ RangyCasBurn使用<代码> < <代码>只是一个示例,以方便地说明我正在尝试做什么。当然,这个
并不代表一个类。正如我在下面对artem提到的,我认为您混淆了JavaScript的运行时特性和TypeScript的静态类型检查特性。但我意识到我一定是误解了你的问题。@RandyCasburn我其实只是愚蠢而已这个
作为一种类型工作,正如我所希望的那样。但是,我将方法
类型设置为此
,而不是返回此
的函数。因为执行上下文现在是B。多态的,如TypeScript文档中所述,是的,但它的工作方式是普通的旧JavaScript。是的,但问题是如何在TypeScript中正确描述它的类型。没有为类B
定义方法
,因此A
中的方法
需要一些特殊的方式来声明其类型。是的,您是对的。但是OP继续混淆了TypeScript的静态类型检查本质和JavaScript的运行时执行(因此,方法只返回值)。但我现在意识到我可能误解了意图。
class A {
method : <T extends A> () => T = () => this;
}
class A {
method : () => this = () => this;
}
class B extends A {
}
const b = new B();
const bb = b.method(); // inferred as const bb: B;