2015-10-14 170 views
1

TL; DR打字稿,声明一个变量与声明模块

是什么意思,当一个变量打字稿声明?例如(来自TypeScript手册或wiki):

declare var d3:D3.Base;

这种情况下的目的是什么?

更多的想法:

据我所知,声明一个模块或命名空间指示它是环境温度,即它不编译成JavaScript,并且仅用于描述对象的形状(类型检查)。但是,变量声明的目的在于避开我。

的问题出现了,因为我一直在寻找从绝对类型(angular.d.ts)的角度声明文件:

declare var angular: angular.IAngularStatic; 

// Support for painless dependency injection 
interface Function { 
    $inject?: string[]; 
} 

// Collapse angular into ng 
import ng = angular; 
// Support AMD require 
declare module 'angular' { 
    export = angular; 
} 

/////////////////////////////////////////////////////////////////////////////// 
// ng module (angular.js) 
/////////////////////////////////////////////////////////////////////////////// 
declare module angular {......module declaration continues.... 

我竭力要弄清楚到底发生了什么事情在这里的“导入“和变量声明。 Visual Studio代码似乎不喜欢导入,但Visual Studio 2015接受它(都使用TypeScript 1.6.2)。

回答

1

什么是在这种情况下

环境声明的目的。主要是为了支持没有用TypeScript编写的库(和环境变量如window)。

更多:https://basarat.gitbooks.io/typescript/content/docs/types/ambient/intro.html

然而,变量声明的目的,我摸不透。

某些库提供了一个全局变量变量。例如。由jquery提供的$

本主题这里介绍:https://basarat.gitbooks.io/typescript/content/docs/types/ambient/variables.html

我竭力要弄清楚到底是怎么回事就在这里与“进口”和变量声明

import可以用来复制类型(这里是declare module angular)。

这是覆盖在这里tips部分:https://basarat.gitbooks.io/typescript/content/docs/project/declarationspaces.html

+0

感谢您的链接到你的书。我一定会看看。很有趣,我正在阅读语言规范,并在那里找到了jquery和Window示例:[link](https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#1.1)是“import “应该以这种方式使用?你为什么认为Visual Studio Code不支持它的用法?错误? – jpetitte

+0

'你为什么认为Visual Studio Code不支持它的用法? Bug?'我尽量不花费时间在非OSS项目上...所以谁知道:) – basarat

+0

TypeScript语言规范的“import”部分的用法是什么?我试图确定是否应该使用该语法。 – jpetitte