我想为使用TypeScript创建的所有对象或引用创建扩展方法

时间:2018-09-28 05:50:45

标签: angular typescript

实际上,我目前正在考虑为在组件中创建的所有对象或引用创建扩展方法

我知道如何在typeScript中创建扩展方法,但我无法获得要使用接口来实现所需行为的东西。

我尝试在界面中使用对象,但无法正常工作

MyExtension方法:extension.model.ts

declare global {
  interface Object {
    thousandsSeperator(): String;
  }
}

Object.prototype.thousandsSeperator = function(): string {
  return Number(this).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
export {};
// this is just a simple extension method

现在,每当有人尝试创建类或接口引用的对象时,他们都应该获得我创建的扩展方法。

// Object
Object1 = new MyComponentClass();

// Reference
Object2: MyComponentClass;

this.Object1.thousandsSeperator();

this.Object2.thousandsSeperator();

1 个答案:

答案 0 :(得分:0)

  下例中的

fooObj 被分配给Foo对象。所以所有   可以访问对象中的方法和继承的属性。

但是

  

fooObj1 被声明为 Foo 类型。即,我们声明    fooObj1 只能具有 Foo 类型的对象。

// Add thousandsSeperator in the Object interface.
interface Object {
    thousandsSeperator(): String;
}

// assign the method to the object prototype.
Object.prototype.thousandsSeperator = function(): string {
    // this is the instance of the object and value is the property on it.
    return Number(this.value).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
};
// now all the object of the created will get the thousandsSeperator method.
class Foo {
    value: string = '123456';
}
// create an object 
let fooObj: Foo = new Foo();
// here on the fooObj thousandsSeperator method can be accessed.
fooObj.thousandsSeperator();

// undeclared variable.
let fooObj1: Foo 
// this is eqivalent to var fooObj1;