- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
TypeScript 2.0介绍
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)