TyoeScript 基本语法
(1) 八个 JS 中你见过的类型
- 为一个变量指定类型的语法
let num: number = 123
如果你没有为这个变量指定类型编译器会自动根据你赋给这个变量的值来推断这个变量的类型
let num = 123
num = 'abc' //error 不能将类型"123"分配给类型number
当我们给 num 赋值为 123 但没有指定类型时,编译器推断出 num 类型为 number 数值类型,所以当给 num 在赋值为字符串”abc”时,就会报错
还有一点特别注意就是 number 和 Number 的区别,TS 中指定类型的时候是小写的 number 而大写的 Number 是 JS 的源生构造函数,所以以后指定类型的时候都是小写,string,boolean 等等类同于此.
(2) 八个 JS 中你见过的类型
1.布尔类型
- 类型为布尔只能是 true 或者 false
let bool: boolean = true
bool = false
bool = 123 //error 报错误因为类型不对
- 也可以分配一个计算之后是布尔值的表达式
let bool: boolean = !!0
console.log(bool) //false
2.数值类型
- TypeScript 和 Javascript 一样,所有数字都是浮点数.所以只有一个 number 类型,而没有 int 或者 float 类型
let num: number
num = 123
num = '123' //error类型不对
num = 0b1111011 //二进制的123
num = 0o173 //八进制的123
num = 0x7b //十六进制的123
3.字符串
- 字符串类型中你可以使用单引号或者双引号来包裹内容,但是你可能会使用 tslint 对引号进行检测,使用单引号或者双引号可以在 tslint 里面配置,你还可以使用 ES6 语法模板字符串,拼接变量和字符串
let str: string = 'Lison'
str = 'Li'
const first = 'Lison'
const last = 'Li'
str = `${first} ${last}`
console.log(str)
- 还有个类型叫做字符串字面量类型。即吧一个字符串字面量当作一种类型。这样就不能再赋值为其他字符串值了.
let str: 'Lision'
str = 'haha' //error 因为类型是Lision不能在赋值了
4.数组
- 在 TS 中有两种定义数组的方式
let list1: number[] = [1, 2, 3]
let list2: Array<number> = [1, 2, 3]
这两种都代表指定这个数组里面的元素必须是数字类型,个人推荐第一种,要是这个数组里面的元素既有数字也有字符串可以这样写
let list1: Array<number | string> = [1, 'aaa', '222', 3]
5.null 和 undefined
- null 和 undefined 有一些共同点。因为在 JS 中 undefined 和 null 是两个基本数据类型,而在 Typescript 中这两者都有自己的类型即 undefined 和 null,也就是说他们既是实际的值,也是类型.
let u: undefined = undefined // 这里可能会报一个tslint的错误:Unnecessary initialization to 'undefined',就是不能给一个值赋undefined,但我们知道这是可以的,所以如果你的代码规范想让这种代码合理化,可以配置tslint,将"no-unnecessary-initializer"设为false即可
let n: null = null
默认情况下 undefined 和 null 可以给赋值给任意类型的值,也就是说你可以把 undefined 赋值给 void 类型,也可以赋值给 number 类型.但是当你在 tscondig.json 的”compilerOptions”里设置了”strictNullChecks”: true 时候,那必须严格对待.undefined 和 null 只能赋值给他们自身和 void 类型
6. object
- object 在 JS 中是引用类型,他和 JS 中的其他类型不一样,像 number,string,boolean,undefined,null 这些都是基本类型.这些类型的变量存的都是他们的值。而 object 存的是引用
let obj: object
obj = { name: 'Lision' }
obj = 123 //error 不能将类型123分配给类型obj
这里特别注意比如你想通过访问对象的属性来获取值的时候,你这样写是错误的
let obj: object
obj = { name: 'Lision' }
console.log(obj.name) //error 类型object上没有name属性
当你先要获取值,就需要后面的接口概念了。
- 有的时候我们定义了一个函数,参数就是对象
function getKeys(obj: object) {
return Object.keys(obj) //会以数组的形式返回obj中的值
}
let value = getKeys({ a: 'a', b: 'b', c: 'c' })
console.log(value) //结果就是["a","b","c"]
getKeys(123) // eror 参数必须是对象类型
symbol
后面单独讲
本章小结
八大类型
- 布尔:boolean
- 数值: number
- 字符串: string
- 数组:Array
或者 type[] - 对象类型 object
- Symbol 类型: symbol
- null 和 undefined 他们本身就是类型