基本语法
ts
let 变量名 : 数据类型 = 值
布尔值
最基本的数据类型就是简单的 true/false
值。
ts
let isDone: boolean = false;
isDone = true;
// isDone = 2 // error
数字
TypeScript
里的所有数字都是浮点数。 这些浮点数的类型是 number
。 除了支持十进制和十六进制字面量,TypeScript
还支持 ECMAScript 2015
中引入的二进制和八进制字面量。
ts
let a1: number = 10 // 十进制
let a2: number = 0b1010 // 二进制
let a3: number = 0o12 // 八进制
let a4: number = 0xa // 十六进制
字符串
可以使用双引号 ""
或单引号 ''
表示字符串。
ts
let name:string = 'tom'
name = 'jack'
// name = 12 // error
let age:number = 12
const info = `My name is ${name}, I am ${age} years old!`
undefined 和 null
默认情况下 null
和 undefined
是所有类型的子类型。 就是说你可以把 null
和 undefined
赋值给 number
类型的变量。
ts
let u: undefined = undefined
let n: null = null
数组
有两种方式可以定义数组。
ts
// 数组定义方式1
let arr1:number[] = [10,20,30]
// 数组定义方式2
let arr2:Array<number> = [100,200,300]
元组 Tuple
元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同,但数据的类型位置和数据个数需和定义元组的时候的数据类型保持一致。
ts
let arr3 :[string,number,boolean] = ['初始值',100,true]
枚举
enum 类型是对 JavaScript 标准数据类型的一个补充,枚举里面的每个数据值都可以叫做元素,每个元素都有自己的编号。
ts
enum Color {
Red,
Green,
Blue
}
// 枚举数值默认从0开始依次递增
// 根据特定的名称得到对应的枚举数值
let myColor: Color = Color.Green // 0
console.log(myColor, Color.Red, Color.Blue)
// 默认情况下,从 0 开始为元素编号。 你也可以手动的指定成员的数值。
enum Color {Red = 1, Green, Blue}
let c: Color = Color.Green
// 或者全部手动赋值
enum Color {Red = 1, Green = 2, Blue = 4}
let c: Color = Color.Green
// 枚举类型提供的一个便利是你可以由枚举的值得到它的名字
enum Color {Red = 1, Green, Blue}
let colorName: string = Color[2]
console.log(colorName) // 'Green'
any
在编程阶段还不清楚类型的变量指定一个类型,它允许你在编译时可选择地包含或移除类型检查。
ts
let notSure: any = 4
notSure = 'maybe a string'
notSure = false // 也可以是个 boolean
// 当一个数组中要存储多个数据,类型不确定,个数也不确定,可以使用any类型来定义数组
let list: any[] = [1, true, 'free']
list[1] = 100
void
某种程度上来说,void 类型像是与 any 类型相反,它表示没有任何类型。 当一个函数没有返回值时使用。
ts
/* 表示没有任何类型, 一般用来说明函数的返回值不能是undefined和null之外的值 */
function showMsg(): void {
console.log('showMsg()')
// return undefined
// return null
// return 1 // error
}
// 声明一个 void 类型的变量没有什么大用,因为你只能为它赋予 undefined 和 null
let unusable: void = undefined
object
object 表示非原始类型,也就是除 number,string,boolean 之外的类型。
ts
function fn2(obj:object):object {
console.log('fn2()', obj)
return {}
// return undefined
// return null
}
console.log(fn2(new String('abc')))
// console.log(fn2('abc') // error
console.log(fn2(String))
联合类型
联合类型(Union Types)表示取值可以为多种类型中的一种。
ts
function toString2(x: number | string) : string {
return x.toString()
}
类型断言
类型断言好比其它语言里的类型转换,但是不进行特殊的数据检查和解构。 它没有运行时的影响,只是在编译阶段起作用。
语法方式1 : <类型>变量名
语法方式2 : 值 as 类型 (
tsx
中只能用此种方式)
ts
/* 需求: 定义一个函数得到一个字符串或者数值数据的长度 */
function getLength(x: number | string) {
if ((<string>x).length) {
return (x as string).length
} else {
return x.toString().length
}
}
console.log(getLength('abcd'), getLength(1234))
类型推断
TypeScript 会在没有明确的指定类型的时候推测出一个类型
ts
/* 定义变量时赋值了, 推断为对应的类型 */
let b9 = 123 // number
// b9 = 'abc' // error
/* 定义变量时没有赋值, 推断为any类型 */
let b10 // any类型
b10 = 123
b10 = 'abc'