gpt4 book ai didi

javascript - 在 typescript 中覆盖继承类中的方法声明

转载 作者:行者123 更新时间:2023-11-30 19:28:30 31 4
gpt4 key购买 nike

假设我有这个我导入的 javascript 模块

class A {
set (k, v) {
}
}

然后我基于那个模块实现了我自己的类

import A from 'module'

class B extends A {
set (k, o) {
super.set(k, o.v)
// other stuff...
}
}

此代码工作正常,但我将我的部分移植为 typescript(我是 typescript 的新手)。幸运的是,我正在导入的模块有它的类型定义,比如

class A<T> {
set(k: string, v: T): void;
}

我是这样实现的

class T2 {
v: T1;
}

class B extends A<T1> {
set(k: string, o: T2): void {
super.set(k, o.v)
}
}

但是 typescript 似乎不喜欢这样。我一直收到这个错误

Type '(k: string, v: T2) => void' is not assignable to type '(k: string, value: T1): void;'

不确定如何改变该方法的参数。如何从 typescript 中的代码片段中获取有效的 javascript?

最佳答案

TypeScript 指出 B A<T1> 实际上可替代因为B#setA#set 不兼容.制作B可替代A<T1>你需要允许有人调用setT1 :

class B extends A<T1> {
set(k: string, o: T1 | T2): void {
if (o instanceof T2) {
super.set(k, o.v); // Our new overload
} else {
super.set(k, o); // The contract that A<T1> *must* support.
}
}
}

关于javascript - 在 typescript 中覆盖继承类中的方法声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56678502/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com