Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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
Javascript 如何获得;这";键入打字脚本_Javascript_Typescript_Types_Typescript Typings_Typescript Generics - Fatal编程技术网

Javascript 如何获得;这";键入打字脚本

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的子类;根据定义,此<

我想要的是,它作为返回类型来表示当前类,即a的子类a。因此,方法只返回与类相同类型的值(不仅仅是基类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;