对象原型自定义函数[Angular 7.2-TS 3.2]

时间:2019-05-14 12:13:41

标签: javascript angular typescript prototype angular7

我试图用自定义函数创建一个全局原型。

我需要这个:

console.log({'active':1, 'profile':1}._state())
  

{'active':true,'profile':1,'state':'root'}

我尝试:

global.ts

declare global {
    interface Object {
        _state(): Object;
    }
}

Object.prototype._state = function (): Object {
    if (this.active === 1) {
        this.active = true;
    }

    if (this.profile === 1) {
        this.state = 'root';
    }

    return this;
};

export {};

当我尝试使用时,失败并显示此错误:

  

TS2339:类型'{'active':1,'profile':1}上不存在属性'_state()'

在我班上说 component.ts

import '. /global.ts';

@Injectable()
export class AppState{

    constructor(){
       console.log({'active':1, 'profile':1}._state());
    }
}
  

TS2345:类型'AppState'的参数不能分配给'对象'类型的参数

1 个答案:

答案 0 :(得分:1)

因此,尝试像这样更改文件中的代码:

global.ts

interface Object{
  _state(): Object; 
}

Object.prototype._state = function() {
  if (this.active === 1) {
        this.active = true;
    }
    if (this.profile === 1) {
        this.state = 'root';
    }
    return this;
}

然后,您必须将接口插入types.d.ts中,这样编译器才能知道Object中有更改。

typings.d.ts

interface Object{
  _state(): Object; 
}

最后,将全局文件导入模块中。

app.module.ts

// make sure the path is right
import './global.ts';

应该可以解决问题。我已经尝试过了,console.log就像一个魅力。