【问题标题】:TypeScript declare merge for core typesTypeScript 为核心类型声明合并
【发布时间】:2021-09-05 18:36:52
【问题描述】:

如何使用 import 为内置类型进行 typescript 声明合并。

实际上,我正在尝试按照本文档中的指令进行接口声明合并: https://www.typescriptlang.org/docs/handbook/declaration-merging.html

  1. 当我在没有任何导入的情况下进行合并时,它可以工作:
interface Function {
  applyParams?(aa: string[]): string
}

function f() {}

const a:  Function  = f

a.applyParams && a.applyParams(["1", "2"]);
  1. 但是,如果我将导入语句添加到文件开头,则会出现错误,如下例所示:
import { MyType } from "./MyType";

interface Function {
  applyParams?(aa: string[]): MyType;
}

function f() {}

const a: Function = f;

a.applyParams && a.applyParams(["1", "2"]);

错误是: TS2559:类型“() => void”与类型“Function”没有共同的属性。

【问题讨论】:

    标签: typescript prototype declaration


    【解决方案1】:

    如果您将定义包装在全局块中,它会起作用。

    import { MyType } from "./MyType";
    
    declare global {
      interface Function {
        applyParams?(aa: string[]): MyType;
      }
    }
    
    function f() {}
    
    const a: Function = f;
    
    a.applyParams && a.applyParams(["1", "2"]);
    

    这可能是因为 TypeScript 处理带有和不带有 import 语句的文件的方式不同。带导入的文件被视为模块并具有本地范围,而其他文件可被视为声明文件并默认具有全局范围。

    【讨论】:

      猜你喜欢
      • 2017-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-19
      相关资源
      最近更新 更多