typescript-cover-image.jpg
主要目的是为补充 JavaScript 语言类型系统的超集 typescript, 自然后从各个角度全方位地关注 JavaScript 类型, 今天从最基本的基础类型入手.
iron-man-all-types-comics-marvel.jpg
布尔型
let isCompleted:Boolean = false;
这里没有什么好说的, 不过因为第一行的 typescript 代码, 我们还是对于我们熟悉 JavaScript 声名赋值表达式做对比来说一说. 不同之处这里为变量 isCompleted 明确, 也就是显式指定了类型 Boolean.
数值型
- let decimal: number = 6;
- let hex: number = 0xf00d;
- let binary: number = 0b1010;
- let octal: number = 0o744;
在 JavaScript 中的数值类型只有浮点型, 这与我们熟知的 java 等语言不同, 没有进行细分. 在这点上 typescript 和 JavaScript 保持一致都使用 number 类型来涵盖所有数值类型.
字符串
前端接受服务端来的数据多数都是字符串形式, 所有字符串在 JavaScript 浏览器端开发显得尤为重要. 在 es2015 字符串模板, 让我们自由组合字符串变得.
- let title:string = "angular basic tut";
- let courses:number = 12;
- let author:string = 'zidea';
- let message:string = `${title} is provided by ${author}`
- console.log(message);
数组类型
- let list:number[] = [1,2,3];
- let arr:Array<number> = [1,2,3]
这样我们就限制了集合只能接收一种类型, 这不就失去了 JavaScript 中数组可以支持多类型的柔性.
Tuple
Tuple 的出现就成功解决上面的问题.
- let tut:[string,number];
- tut = ["angular basic tut",12];
- console.log(tut);
枚举
枚举这个概念可能对于 JavaScript 的开发人员是一个新鲜事物, 我也是在学习 java 时候才接触到这个数据类型. 我们可以将一类事物所有元素或者可能性通过枚举形式列举出来.
enum Language {JavaScript,JAVA,CPP}
let lang:Language = Language.JAVA
console.log(lang)
let lang:Language = Language.JAVA
- console.log(lang)
- let java:string = Language[2]
- console.log(java)
从输出的结果可以看出我枚举对应值为整型的数值, 原因是占用内存空间小, 而且我们通过其键的名称了解其含义.
1 CPP
Any
有了类型系统让我们程序, 让我们程序变得规规矩矩, 同时也失去一些 magic , 是呀鱼和熊掌不能兼得, 不过如果我们想吃熊掌就能吃熊掌想吃鱼就能吃鱼就行了. 所以引入 Any 可以接受任何类型的类型.
这样让我们暂时无法确定其类型变量就有处理的办法.
- let notSure:any = 123;
- notSure = "maybe a string instead";
- notSure = false;
- Void
可以将 void 类型理解为 any 类型的反义词, 有过 java 这样静态语言开发经验人看到应该感到很亲切吧
- function warnUser(): void {
- console.log("This is my warning message");
- }
Null 和 Undefined
有关 Null 和 Undefined 的用法本人开始也是 confusing, 这是因为当初语言设计有点仓储了, 我们在实际做项目时候可以保留一种表示为空的就行, 这里个人喜欢保留 undefined 作为表示为空. 在 typescript 也将其作为类型使用. 默认情况也就是没有开启 strictnullchecks 是, undefined 和 null 是其他类型的子类型.
- let u: undefined = undefined;
- let n: null = null;
如果我们开启 strictnullchecks 来进行编译 typescript 后, null 或 undefined 类型就仅能赋值为 void 或其各自的类型.
Never
字面理解是从不意思, 什么样情况我们会用到 Never, 暂时我还没用到, 学习中...
类型推断
有时候我们可能要比程序更了解变量是什么类型, 或者可以缩小类型可能的范围. 类似于其他语言的类型转换, 但是并不是通过重构来实现类型转换, 并不影响运行时, 只是在编译期间对类型检查.
- let someVal:any = "aString";
- let someValLength:number = (someVal as string).length;
我相信这两类型转换方式大家都应该熟悉没过了
let someValLength:number = (<string>someVal).length;
5542458-7796527023-mcu-a.PNG
来源: http://www.jianshu.com/p/46bd7a8f61a0