如何覆盖从打字稿中其他文件导入的功能?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何覆盖从打字稿中其他文件导入的功能?相关的知识,希望对你有一定的参考价值。

我在getPerson文件中声明了一个名为msq.ts的函数,在我的app.ts文件中,我只想用新的实现替换它。

在我的msq.ts文件中

export function getPerson(): Promise< name: string, id: number > 
    return new Promise((resolve, reject) => 
        setTimeout(() => 
            resolve( name: "manas", id: 2 );
        , 5000);
    )

在我的app.ts文件中

import * as msq from "../msq";


msq.getPerson = function():Promise<name:string,id:number>
    return Promise.resolve(name:"manas",id:2);

但是当我尝试替换功能时,这显示了以下错误

无法分配给getPerson,因为它是一个只读属性

答案

如果用对象文字包装它并覆盖该对象作为默认值,则可以覆盖该函数。

msq.ts文件中

function getPerson(): Promise< name: string, id: number > 
    return new Promise((resolve, reject) => 
        setTimeout(() => 
            resolve( name: "manas", id: 2 );
        , 5000);
    )


export default 
     getPerson

app.ts文件中

import  msq from "../msq";

// now we can override the getPerson the way we want

msq.getPerson = function():Promise<name:string,id:number>
    return Promise.resolve(name:"manas",id:2);

如果我们正在进行单元测试(使用笑话),那么我们可以轻松地使用jest.fn()对其进行模拟

 import user from "../user";
 import msq from "../msq";

 // now we can override the getPerson the way we want

 msq.getPerson = jest.fn().mockResolvedValue( name: "manas", id: 2 );

 it("user.getUserInfo must resolve the person with id 2",async()=>

      const result = await user.getUserInfo();
      expect(result).toEqual(name:"manas",id:2);

 ); 

以上是关于如何覆盖从打字稿中其他文件导入的功能?的主要内容,如果未能解决你的问题,请参考以下文章

如何在打字稿中声明全局变量

打字稿中的全局类型

在打字稿中的类中创建具有未知参数的方法

在打字稿中使用 mysql 类型

Angular 2 - 如何在打字稿中使用 FileReader 从给定的 URL 读取文件?

从打字稿中的索引文件导出JSON文件