【问题标题】:Access global scope for type hinting in TypeScript访问 TypeScript 中类型提示的全局范围
【发布时间】:2015-02-15 23:57:50
【问题描述】:

我在 Typescript 中遇到类型提示问题,无法指定全局类型。

举个例子

// Builder.ts
module Builder {
  class Block {
    // ...
    function uploadFile(file:File) { /* ... */ }
  }
}

//Blocks.ts
module Builder {
  module Types {
    class Image {
      // ...
      function uploadFile(file:File) { /* ... */ }
    }
    class File {
      // ...
    }
  }
}

编译时出现这个错误:

错误 TS2415:“图像”类错误地扩展了基类“块”。
属性“uploadFile”的类型不兼容。 类型 '(file: File) => void' 不可分配给类型 '(file: File) => void'。

这充其量是相当具有误导性的。

因此,在 PHP 中,您可以将 File 指定为 \File 以获取全局文件,但是我无法在 TypeScript 中找到/弄清楚如何执行此操作。

从逻辑上讲(至少对我而言)应该是window.File

【问题讨论】:

    标签: typescript


    【解决方案1】:

    但是我无法在 TypeScript 中找到/弄清楚如何执行此操作。

    这是一个开放的功能请求:https://github.com/Microsoft/TypeScript/issues/983,您可以在其中表达您的愿望。

    请注意,目前有一个解决方法:https://github.com/Microsoft/TypeScript/issues/983#issuecomment-66704566

    一个专门为你的情况:https://stackoverflow.com/a/27433864/390330

    【讨论】:

    • 谢谢,我很惊讶这仍然是一个相当新鲜的错误,因为它看起来很成熟。我只是 typescript 的新手,但我原以为现在任何体面的项目都会很好地解决这些问题。
    • 具有模块命名空间的单个文件在 JavaScript / TypeScript 中无法扩展。你更有可能更早开始使用外部模块:youtube.com/watch?v=KDrWLMUY0R0&hd=1 绕过这个问题
    • 我理解这个概念,但是文件仍然在同一个项目中一起验证,所以即使 File 和 Image 类在不同的文件中,它们仍然在同一个命名空间中,因此仍然与全局变量。像这样的一些项目,将其拆分太多并没有什么意义,因为所有文件总是需要的,并且非常紧密地耦合在一起。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 2012-01-10
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    相关资源
    最近更新 更多