TypeScript学习笔记一:环境变量(译)
环境(Ambients)
环境声明为已经存在的js代码提供静态类型。它与常规声明不同的是它不生成js代码。环境声明为已经存在环境和导入程序外部的实体提供类型信息,而不引入新的变量、方法、类、枚举或命名空间。例如用”<script/>"标签引用的js库。
环境声明
环境声明以”declare”关键字标注,可以声明变量、方法、类、枚举、命名空间和模块。
AmbientDeclaration:
declare AmbientVariableDeclaration
declare AmbientFunctionDeclaration
declare AmbientClassDeclaration
declare AmbientEnumDeclaration
declare AmbientNamespaceDeclaration
环境声明:
declare 环境变量声明
declare 环境函数声明
declare 环境类声明
declare 环境枚举声明
declare 环境命名空间声明
环境变量声明
环境变量声明向包含的声明空间中引入一个变量。
AmbientVariableDeclaration:
var AmbientBindingList ;
let AmbientBindingList ;
const AmbientBindingList ;
AmbientBindingList:
AmbientBinding
AmbientBindingList , AmbientBinding
AmbientBinding:
BindingIdentifier TypeAnnotationopt
环境变量声明:
var 环境绑定列表;
let 环境绑定列表;
const 环境绑定列表;
环境绑定列表:
环境绑定
环境绑定列表,环境绑定
环境绑定:
绑定标识符 类型注释(可选)
环境变量声明可选地包含一个类型注释。如果无类型注释表示,变量将被假设为any类型。
环境变量声明不允许初始化表达式。
环境函数声明
环境函数声明向包含的声明空间中引入一个函数。
AmbientFunctionDeclaration:
function BindingIdentifier CallSignature ;
环境函数声明:
function 绑定标识符 调用签名;
我们可以指定多个相同命名的环境函数声明来重载环境函数。当不能多次重载,也不能只是返回类型不同。
环境函数声明不能指定函数体,也不允许默认参数值。
环境类声明
环境类声明在包含的声明空间声明一个类类型和构造函数。
AmbientClassDeclaration:
class BindingIdentifier TypeParametersopt ClassHeritage { AmbientClassBody }
AmbientClassBody:
AmbientClassBodyElementsopt
AmbientClassBodyElements:
AmbientClassBodyElement
AmbientClassBodyElements AmbientClassBodyElement
AmbientClassBodyElement:
AmbientConstructorDeclaration
AmbientPropertyMemberDeclaration
IndexSignature
AmbientConstructorDeclaration:
constructor ( ParameterListopt ) ;
AmbientPropertyMemberDeclaration:
AccessibilityModifieropt staticopt PropertyName TypeAnnotationopt ;
AccessibilityModifieropt staticopt PropertyName CallSignature ;
环境类声明:
class 绑定标识符 类型参数(可选) 类继承{环境类体}
环境类体:
环境类体元素列表(可选)
环境类体元素列表:
环境类体元素
环境类体元素列表 环境类体元素
环境类体元素:
环境构造器声明
环境属性成员声明
索引签名
环境构造器声明:
构造器(参数列表(可选));
环境属性成员声明:
可访问性修饰符(可选) static(可选)属性名 类型注释(可选);
可访问性修饰符(可选) static(可选)属性名 调用签名;
环境枚举声明
环境枚举声明与非环境枚举声明的语法相同。
AmbientEnumDeclaration:
EnumDeclaration
环境枚举声明:
枚举声明
二者除以下两方面外,其他方面的处理方式相同:
- 前者,所有格的枚举成员声明都必须以常量枚举表达式方式指定值。
- 前者,没指定“const”修饰符时,枚举类型声明的默认值是计算成员(相对于自动增值)。
环境命名空间声明
环境命名空间声明声明一个命名空间
AmbientNamespaceDeclaration:
namespace IdentifierPath { AmbientNamespaceBody }
AmbientNamespaceBody:
AmbientNamespaceElementsopt
AmbientNamespaceElements:
AmbientNamespaceElement
AmbientNamespaceElements AmbientNamespaceElement
AmbientNamespaceElement:
exportopt AmbientVariableDeclaration
exportopt AmbientLexicalDeclaration
exportopt AmbientFunctionDeclaration
exportopt AmbientClassDeclaration
exportopt InterfaceDeclaration
exportopt AmbientEnumDeclaration
exportopt AmbientNamespaceDeclaration
exportopt ImportAliasDeclaration
环境命名空间声明:
命名空间 标识符地址{环境命名空间体}
环境命名空间体:
环境命名空间元素列表(可选)
环境命名空间元素列表:
环境命名空间元素
环境命名空间元素列表 环境命名空间元素
环境命名空间元素:
export(可选)环境变量声明
export(可选)环境词汇声明
export(可选)环境方法声明
export(可选)环境类声明
export(可选)接口声明
export(可选)环境枚举声明
export(可选)环境命名空间声明
export(可选)导入别名声明
除了导入别名声明外,环境命名空间元素通常声明导入的实体,无论是否包含可选的“export"修饰符。
环境模块声明
环境模块声明声明一个模块。只允许在源文件的顶层声明并作用于全局命名空间。标识符必须指定一个顶级模块名,不允许相对模块名。
AmbientModuleDeclaration:
declare module StringLiteral { DeclarationModule }
环境模块声明:
declare module 字符串值{模块声明}
其中的导入声明只能通过顶级模块名来引用其他模块,不允许相对模块名。
如果此声明包括导出赋值表达式,!!!!!!!!!!!!!,如果此声明不包含导出赋值表达式,那么无论是否包含“export”修饰符,模块中声明的实体都将被导出。环境模块是"开放性“的,同名的环境模块声明作用于同一模块。例如,下面的两个不同资源文件中的"io"模块声明:
declare module "io" {
export function readFile(filename: string): string;
}
declare module "io" {
export function writeFile(filename: string, data: string): void;
}
等同于下面的组合声明:
declare module "io" {
export function readFile(filename: string): string;
export function writeFile(filename: string, data: string): void;
}

浙公网安备 33010602011771号