第二章 TypeScript 2.0介绍.pdf

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
TypeScript 2.0介绍 TypeScript 2.0介绍 Null和undefined类型 TypeScript现在有两个特殊的类型:Null和Undefined , 它们的值分别是null和 undefined。 以前这是不可能明确地命名这些类型的 但是现在 null和 undefined不管在什么类型检查模式下都可以作为类型名称使⽤。 以前类型检查器认为null和undefined赋值给⼀切。实际上 null和undefined 是每⼀个类型的有效值 并且不能明确排除它们 (因此不可能检测到错误)。 --strictNullChecks --strictNullChecks可以切换到新的严格空检查模式中。 在严格空检查模式中 null和undefined值不再属于任何类型的值 仅仅属于它们 ⾃⼰类型和any类型的值 (还有⼀个例外 undefined也能赋值给void)。因此 尽管在常规类型检查模式下T和T | undefined被认为是相同的 (因为 undefined 被认为是任何T的⼦类型) 但是在严格类型检查模式下它们是不同的 并且仅仅 T | undefined允许有undefined值 T和T | null的关系同样如此。 ⽰例 // 使⽤--strictNullChecks参数进⾏编译的 let x : number; let y : number | undefined; let z: number | null | undefined; x = ; // 正确 y = ; // 正确 z = ; // 正确 x = undefined; // 错误 y = undefined; // 正确 z = undefined; // 正确 x = null; // 错误 y = null; // 错误 z = null; // 正确 x = y; // 错误 x = z; // 错误 y = x; // 正确 y = z; // 错误 z = x; // 正确 z = y; // 正确 使⽤前赋值检查 在严格空检查模式中 编译器要求未包含undefined类型的局部变量在使⽤之前必 须先赋值。 ⽰例 // 使⽤--strictNullChecks参数进⾏编译 let x : number; let y : number | null; let z: number | undefined; x; // 错误,使⽤前未赋值 y; // 错误,使⽤前未赋值 z; // 正确 x = ; y = null; x; // 正确 y; // 正确 编译器通过执⾏基于控制流的类型分析检查变量明确被赋过值。在本篇⽂章后⾯会有 进⼀步的细节。 可选参数和属性 可选参数和属性会⾃动把undefined添加到他们的类型中 即使他们的类型注解明 确不包含undefined。例如 下⾯两个类型是完全相同的: // 使⽤--strictNullChecks参数进⾏编译 type T = (x?: number) = string; // x的类型是 number | type T2 = (x?: number | undefined) = string; // x的类型是 number | ⾮null和⾮undefined类型保护 如果对象或者函数的类型包含null和undefined 那么访问属性或调⽤函数时就会 产⽣编译错误。因此 对类型保护进⾏了扩展 以⽀持对⾮null和⾮undefined的检 查。 ⽰例 // 使⽤--strictNullChecks参数进⾏编译 declare function f(x : number): string; let x : number | null | undefined; if (x) { f(x); // 正确,这⾥的x类型是number } else { f(x); // 错误,这⾥的x类型是number? } let a = x != null ? f(x) : ; // a的类型是string let b = x f(x); // b的类型是 string | 0 | null | undefined ⾮null和⾮undefined类型保护可以使⽤==、

文档评论(0)

0520 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档