Typescript 是什么?
- Typescript 是 JavaScript 的超集,两者是所属关系。
- Typescript 是 JavaScript 的增强,包含 JavaScript 的最新特性,非常适合创建大型项目
- Typescript 是静态语言与动态语言 JavaScript 不同,静态语言在编写代码的时候就能发现潜在的错误,编写代码时静态语言能识别到可能使用到的属性等,像 data 参数静态语言能直接读出里面的属性 x, y
下载安装及使用
- 使用
npm install -g typescript
下载即可 tsc -v
查看版本号- 建议安装 TSlint 插件规范代码
基础类型
1.布尔值
1 | let isDone: boolean = false; |
2.数字
1 | let decLiteral: number = 6; |
3.字符串
1 | let name: string = "bob"; |
4.数组
1 | let list: number[] = [1, 2, 3]; |
第二种方式是使用数组泛型,Array<元素类型>
1 | let list: Array<number> = [1, 2, 3]; |
5.元组 Tuple
元组类型允许表示一个已知元素数量和类型的数组
1 | let x: [string, number]; |
当访问一个已知索引的元素,会得到正确的类型:
1 | console.log(x[0].substr(1)); // OK |
当访问一个越界的元素,会使用联合类型替代(已经定义的):
1 | x[3] = 'world'; // OK, 字符串可以赋值给(string | number)类型 |
6.枚举
是一种数据结构
1 | //第一个字母大写 |
再举个栗子
1 | // 对比常用的 JS 代码 |
7.任意值
1 | //对数组内的类型不确定时 |
或者我们在编程阶段还不清楚类型的变量。 它们可能来源于 动态的内容。
- 例如用户输入
- 第三方代码库
这种情况下,我们可以使用 any
来标记这些变量
8.空值
当一个函数没有返回值的时候,通常是 void
1 | //在函数中的写法 |
9.Null 和 Undefined
它们本身类型用处不大
默认情况
null
和undefined
是所有类型的子类型,就是说,你可以把null
和undefined
赋值给number
类型然而,当你指定了
--strictNullChecks
标记,null
和undefined
只能赋值给void
你也可以使用联合类型
string | null | undefined
注意:我们鼓励尽可能地使用–strictNullChecks,但在本手册里我们假设这个标记是关闭的。
10.Never
表示那些永远不存在的值的类型
never
类型是任何类型的子类
举个具体点的栗子,当你有个 union type
1 | interface Foo { |
在 switch 当中判断 type,TS 是可以收窄类型的 (discriminated union):
1 | function handleValue(val: All) { |
注意在 default 里面我们把被收窄为 never 的 val 赋值给一个显式声明为 never 的变量。如果一切逻辑正确,那么这里应该能够编译通过。但是假如后来有一天你的同事改了 All 的类型:
1 | type All = Foo | Bar | Baz |
这里就会编译报错,通过这个办法就可以穷尽所有 All 的类型
详细可以看尤大的知乎回答
11.类型断言
告诉编译器,”相信我,我知道自己在干什么”。
类型断言的两个形式
- 尖括号语法
1 | let someValue: any = "this is a string"; |
as
语法
1 | let someValue: any = "this is a string"; |
两种形式是等价的。
注意:当你在 TypeScript 里使用 JSX 时,只有
as
语法断言是被允许的。
更多介绍请访问 TypeScript 中文手册