在这个特定的示例中,我扩展了数组
interface BetterArray<T> extends Array<T> {
push(this: BetterArray<T>, value: T): this;
}
参考说明-
Array
interface Array<T> {
push(...items: T[]): number;
}
但我得到了以下编译时错误:
接口“BetterArray”错误地扩展了接口“T[]”
属性“推送”的类型不兼容。类型“(this:betterray,值:T)=
是否有任何方法可以强制指示TypeScript我想要覆盖我接口上的push(比如隐藏在C#中的成员)?
注意-我使用的是TypeScript 2.0
进一步阅读-这似乎是纯粹的返回类型-基本上我想强制接口,一个新的返回类型。。。
interface A {
fn(): number;
}
interface B extends A {
fn(): this;
}
接口“B”不正确地扩展了接口“A”。属性“fn”的类型不兼容。键入“()=
根据nitzan tomer的回答
您只需要添加rray.push的原始签名:
interface BetterArray<T> extends Array<T> {
push(...items: T[]): number;
push(this: BetterArray<T>, value: T): this;
}
使用永远
类型似乎适用于此。Intellisense拾取永远
,"永远"返回,所以不用麻烦向您显示方法签名(整洁)
interface BetterArray<T> extends Array<T> {
push(...items: T[]): never;
push(this: BetterArray<T>, value: T): this;
}
您只需要添加数组的原始签名。推送
:
interface BetterArray<T> extends Array<T> {
push(...items: T[]): number;
push(this: BetterArray<T>, value: T): this;
}
问题是,如果this
是一个BetterArray
,则不能返回this
,例如:
class BetterArrayClass<T> extends Array<T> {
push(...items: T[]): number;
push(this: BetterArrayClass<T>, value: T): this;
push(this: BetterArrayClass<T>, ...items: T[]): number | this {
return this;
}
}
错误与:
类型“BetterArrayClass”不可分配给类型“number | this”
类型“BetterArrayClass”不可分配给类型“this”<这是一个更好的课堂
原因可以在这个简单的例子中看到:
class A {
fn(this: A, num: number): this {
return this; // Error: Type 'A' is not assignable to type 'this'. this: A
}
}
class B extends A {
fn(num: number): this {
if (num < 0) {
return super.fn(num);
}
return this;
}
}
如果在B.fn
中,我们调用的是super。fn
那么这个
不是A
而是B
,在任何情况下,我们都希望返回B
的实例
这不是A.fn
所描述的。
问题内容: 为什么必须重写接口的所有方法? 例如,如果我有 我将有很多我什至不会使用的方法,有没有一种方法可以删除未使用的实现方法,例如,如果 我计划从接口中使用一种方法 我也不想使用抽象,因为这意味着我无法创建对象的实例(至少我的编译器这样说) 问题答案: 具体的类必须始终实现接口的所有方法。如果您还没有扩展,可以扩展。它实现了空方法,以避免将其写出来。您可以在类内部使用匿名类,如下所示:
问题内容: 是否可以在Python中覆盖+ =? 问题答案: 是的,重写该方法。例:
问题内容: 这是代码: 问题:代码可以编译并且一切正常。我想知道类Hello中的meth1()是否覆盖了哪个meth1()?接口中的ont或抽象类中的ont,为什么? 问题答案: 答案很简短:两者..... 实际上,是正确的:您不会 覆盖 任何一个,而是使用一种方法来 实现 它们两者。
我这样做对吗?我生成了toString()。
问题内容: 好的,我从很多地方和来源都听说过,每当我覆盖equals()方法时,我也需要覆盖hashCode()方法。但是请考虑以下代码 这里的输出为true,完全按照我想要的方式为false,我根本不关心重写hashCode()方法。这意味着hashCode()覆盖是一种选择,而不是每个人都说的强制性选择。 我想要第二次确认。 问题答案: 它对您有用,因为您的代码未使用任何需要API的功能(Ha
问题内容: 我试图覆盖Java中的方法。我有一堂课,基本上有2个数据字段和。现在,我想重写方法,以便可以在2个对象之间进行检查。 我的代码如下 但是当我写它给我错误时,因为方法只能比较并且是。 Solution 我按照建议使用运算符,问题解决了。 问题答案: Output: `run: – Subash Adhikari - VS - K false – Subash Adhikari - VS