【问题标题】:Use typings from a declared module in TypeScript在 TypeScript 中使用已声明模块中的类型
【发布时间】:2014-03-02 14:04:57
【问题描述】:

我正在阅读 DurandalJS.com 网站上的 Durandal“入门”指南,但我正在尝试使用 TypeScript。最后一个演示(雷尼尔山)有一个模块,代码如下:

define(function (require) {
  var http = require('plugins/http'),
      ko = require('knockout');
  //other stuff
}

当我在浏览器中运行代码时一切正常,但我想看看是否可以让 TypeScript 了解这些类型。我从 DefinitiveTyped 导入了 Durandal、Knockout、jQuery 和 RequireJS NuGet 包,并且我能够通过以下方式获取类型化的 ko 变量

ko : KnockoutStatic = require('knockout');

这是因为 KnockoutStatic 是在 Knockout.d.ts 文件中声明的接口。然而,在 durandal.d.ts 文件中,'plugins/http' 是这样声明的,没有命名接口:

declare module 'plugins/http' { /*stuff*/ }

我有三个问题:

  • 是否应该/是否有办法让 TypeScript 根据内部模块名称的 require 调用自动了解 ko 和 http 的类型?
  • 有没有办法以 durandal.d.ts 文件的结构方式(模块与接口)显式键入我的 http 变量。
  • 如果不是,那么设置 durandal.d.ts 文件以允许对 http 变量进行强类型化的正确方法是什么 - 只需声明一个接口而不是一个模块?

【问题讨论】:

    标签: typescript durandal


    【解决方案1】:

    三个问题的答案:

    import http = require('plugins/http');
    

    此外,您不应该手动“定义”,因为 typescript 会为您生成它。这些被称为外部模块。

    PS : 我有一个关于 typescripts 模块系统的视频http://youtube.com/watch?hd=1&v=KDrWLMUY0R0

    【讨论】:

    • 嗨,Bas,导入 http = 后是否有要求?
    猜你喜欢
    • 2021-09-07
    • 1970-01-01
    • 2016-10-06
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    相关资源
    最近更新 更多