Javascript 如何使用typescript在第三方类上定义方法?
我试图扩展一个第三方类,但在让typescript发挥良好效果方面遇到了困难。基本上,我不能在我的新方法中使用类中已经定义的任何现有方法 一个解决方法是在Javascript 如何使用typescript在第三方类上定义方法?,javascript,typescript,Javascript,Typescript,我试图扩展一个第三方类,但在让typescript发挥良好效果方面遇到了困难。基本上,我不能在我的新方法中使用类中已经定义的任何现有方法 一个解决方法是在extensions.ts中重新定义现有方法(见下文),但必须有更好的方法 第三方index.d.ts Myextensions.ts 调用现有方法(如上面的this.originalExistingMethod())时,typescript会抱怨: TS2339:类型“SomeClass”上不存在属性“originalExistingMeth
extensions.ts
中重新定义现有方法(见下文),但必须有更好的方法
第三方index.d.ts
Myextensions.ts
调用现有方法(如上面的this.originalExistingMethod()
)时,typescript会抱怨:
TS2339:类型“SomeClass”上不存在属性“originalExistingMethod”
有没有办法避免在执行时重新定义现有方法?初始答案
下面是使用Tensorflow库的示例
扩展
import { AdadeltaOptimizer } from '@tensorflow/tfjs-core';
declare module '@tensorflow/tfjs-core' {
interface AdadeltaOptimizer {
newMethod(message: string): void;
}
}
AdadeltaOptimizer.prototype.newMethod = function (message: string) {
console.log('===============');
console.log(message);
console.log('===============');
}
索引
import { AdadeltaOptimizer } from '@tensorflow/tfjs';
import "./extend";
const optimizer = new AdadeltaOptimizer(10, 10);
// the existing method is present
const className = optimizer.getClassName();
// the augmentation is also present
optimizer.newMethod(`The className is ${className}.`);
还有一个类似的例子,它使用map
方法来增强Observable
意见的后续行动
谢谢。虽然我的问题是在定义newMethod时使用现有方法。所以在extend.ts中,而不是index.ts中。有什么想法吗 这也适用于
extend.ts
,如下所示:
import { AdadeltaOptimizer } from '@tensorflow/tfjs-core';
declare module '@tensorflow/tfjs-core' {
interface AdadeltaOptimizer {
newMethod(message: string): void;
}
}
AdadeltaOptimizer.prototype.newMethod = function (message: string) {
// just access the original method on `this`
const className = this.getClassName();
console.log('===============');
console.log(className);
console.log(message);
console.log('===============');
}
真正的问题是:为什么要修改第三方类?温和地说,这是一种不好的做法。因为这是一种不好的做法,你将很难找到好的/正确的解决方案。谢谢。尽管我的问题是在定义
newMethod
时使用现有方法。因此,在extend.ts
中,而不是在index.ts
中。有什么想法吗?那也一样。我会发布一个更新。谢谢你的例子回购肖恩!我克隆了它,但它仍然不起作用,但是。。。。事实证明,在塞恩的储藏室里有什么东西才是真正的罪魁祸首!通过使用npm install
安装模块进行验证。为了解决Thread的问题,我运行了Thread cache clean&&Thread install
,没有更多的ts错误!我很高兴听到这一切最终得以实现。很好地抓住了纱线。
import { AdadeltaOptimizer } from '@tensorflow/tfjs';
import "./extend";
const optimizer = new AdadeltaOptimizer(10, 10);
// the existing method is present
const className = optimizer.getClassName();
// the augmentation is also present
optimizer.newMethod(`The className is ${className}.`);
import { AdadeltaOptimizer } from '@tensorflow/tfjs-core';
declare module '@tensorflow/tfjs-core' {
interface AdadeltaOptimizer {
newMethod(message: string): void;
}
}
AdadeltaOptimizer.prototype.newMethod = function (message: string) {
// just access the original method on `this`
const className = this.getClassName();
console.log('===============');
console.log(className);
console.log(message);
console.log('===============');
}