TS学习笔记(一)
1. js的灵活性,对小项目而言非常好,但是对于大的项目而言,如果没有变量类型检查,随着变量类型的数量成倍的增加,你总有记错、遗漏的时候
2. 要解决灵活性带来的隐患,我们需要的是类型。更准确的说,是项目开发时的类型检查能力。
3. TS由三个部分组成:类型、语法与工程。
4. TS内置了一批类型工具
5、TS会在构建时被抹除类型代码与语法的降级。这一能力是通过TypeScript Complier(tsc)实现的。tsc以及tsc配置(TSConfig)是ts工程层面的重要部分。
6、null与undefined类型,在ts里面,在没有开启strictNullChecks检查时,会被视作其他类型的子类型
7、在js里面void是一个操作符,会执行后面跟着的表达式,并返回undefined。在ts的原始类型标注中也有void,这里得void用于描述一个内部没有return语句,或者没有显示return一个值的函数的返回值。
// 下面这两个的返回值类型都是void
function func1() {} function func2() { return; }
// 下面的返回值是undefined function func3() { return undefined; }
虽然func3的返回值类型会被推导为undefined,但是你仍然可以使用void类型进行标注,因为在类型层面func1、func2、func3都表示一个“没有返回一个有意义的值”
需要特别注意的是,如果变量、对象方法、函数参数是一个返回值为void类型的函数,那么并不代表不能赋值为有返回值的函数。
type voidFunc = () => void; const f:voidFunc = () => { return 123; };
这里的void类型只是表示该函数的返回值没有利用价值
8、元组就是确定好数组类型的每一个值,并且是定长的。作用是基于位置的类型标注、避免出现越界访问。严谨性就是TS的一个特点,特别是提升数据的严谨性。
9、具名元组,神奇的玩样儿。下面这么写
const arr7: [name: string, age: number, male: boolean] = ['linbudu', 599, true];
10、TS的类型声明是可选的,你可以加,也可以不加。即使不加类型声明,依然是有效的TS代码,只是这时不能保证TS会正确推断出类型
11、js的运行环境(浏览器和Node.js)不认识TS代码。TS转为JS代码的过程叫做编译(compile)。TS的类型检查只是编译时的类型检查
12、TS项目里面,有值代码和类型代码的区分。
13、变量类型一旦被设置为any,TS实际上会关闭这个变量的类型检查。用var和let声明的变量,即使不赋值,也会被推导为any类型。但是用const声明的不行,因为js规定const声明变量时,必须同时有初始值
14、any有一个污染问题。any类型赋值给其他类型的变量时,会导致出错,在运算的时候TS检查不出问题,只有在运行的时候才会报错。