[英]How to dynamically extend class with method in Typescript from remote js file?
[英]How to dynamically extend class with method in TypeScript?
如何在TypeScript中使用方法动态扩展类? 有什么例子吗? 我尝试:
UsersBlocksMyOrders.prototype.myFunc = function():any{
alert('23434');
};
但是编译器给我一个错误。
您还需要执行以下操作:
interface UsersBlocksMyOrders {
myFunc(): any;
}
否则,编译器对此一无所知。
即使使用现有的类,它的确也有效。
例如:
interface String {
logit(): void;
}
String.prototype.logit = function () {
console.log(this);
}
let a = "string";
a.logit();
( 操场上的代码 )
如果您将添加更多相关信息,将更容易为您提供帮助。
您没有提到导入。
因为您要在另一个模块(称为模块增强)中进行更改,所以需要执行以下操作:
Import { UsersBlocksMyOrders } from "../pages/users/blocks/myorders";
declare module "../pages/users/blocks/myorders" {
interface UsersBlocksMyOrders {
logit(): void;
}
}
UsersBlocksMyOrders.prototype.logit = function () { console.log(this); }
但是我从来没有尝试过相对路径,为什么要这么做?
它是您的源代码,您可以直接在pages/users/blocks/myorders
进行pages/users/blocks/myorders
,就像尝试这样做不是一个好主意。
这可能会有所帮助( 从此处开始 ):
function extend<T, U>(first: T, second: U): T & U {
let result = <T & U>{};
for (let id in first) {
(<any>result)[id] = (<any>first)[id];
}
for (let id in second) {
if (!result.hasOwnProperty(id)) {
(<any>result)[id] = (<any>second)[id];
}
}
return result;
}
class Person {
constructor(public name: string) { }
}
interface Loggable {
log(): void;
}
class ConsoleLogger implements Loggable {
log() {
// ...
}
}
var jim = extend(new Person("Jim"), new ConsoleLogger());
var n = jim.name;
jim.log();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.