初识
- 类型注解
name: string- 为函数或变量添加约束
- 也会静态的检查代码,例如参数数量是否为函数预期的数量
- 接口
interface name {key:type}- 理解为对一组key:type的提取定义,你可以将函数的变量接受处使用对象接口。
- 类
class name { }- 像java一样在class中使用key :type为类定义属性
- 在constructor里使用public定义参数相当于创建了同名的成员变量
接下来,我们要添加开发时依赖
awesome-typescript-loader和source-map-loader。
npm install --save-dev typescript awesome-typescript-loader source-map-loader
这些依赖会让TypeScript和webpack在一起良好地工作。
awesome-typescript-loader可以让Webpack使用TypeScript的标准配置文件tsconfig.json编译TypeScript代码。
source-map-loader使用TypeScript输出的sourcemap文件来告诉webpack何时生成自己的>sourcemaps。 这就允许你在调试最终生成的文件时就好像在调试TypeScript源码一样。
- 配置文件
tsconfig.json文件,包含了输入文件列表以及编译选项。
类型
- 布尔值:boolean
- 数字:number
- 字符串:string
- 数组:type[]或Array<type>
- 元组:[type,type,...]
- 表示有序的数组,但是数组的各个元素可以是不同类型
- 枚举:enmu name{value=key,value,...}
- key的默认值从0开始类似索引
- 你可以使用name[key]取到对应的value值
- any:弱类型,类似js中直接let无特殊类型特征
- undifned/null
- 他们是所有类型的子类型,也是专门的类型,这两个值也可以被赋值给任意类型。
- 你可以使用--strictNullChecks标记来使得nul和undifined只能赋值给他们自己和void类型
- never类型表示不存在值的类型,例如没有出口的函数。
- 类型断言
- <type>name或者name as type 来断言这个name一定是这个type,绕过ts的属性检查。
接口
interface LabelledValue {
label: string;
}
function printLabel(labelledObj: LabelledValue) {
console.log(labelledObj.label);
}
- 可选属性:在name后加?来将其定义为一个可选属性。即使此属性缺少也会不认为输入的数据有误。
- 只读属性:name前加readonly前缀,当你初始化这个属性后就无法再次改变了。也有ReadyonlyArray
- 函数接口:interface functionName{ (key:type,...):type }
- 括号中定义参数以及他们的type,后续为函数返回值type
- 可索引的类型-?不太理解存在意义,暂留坑
- 接口可以像类一样有继承,实现接口的接口等。
others
函数
let fn : (x:number, y:number): number {
return x+y;
}
- 使用?来定义可选参数,在定义类别时复制来规定默认值。
- 使用扩展运算符来接受其他参数。...restArgs: string[]
范型
- 使用<type>来定义一个反省,在调用时将type替换为制定类型,定义时的type像变量一样吧这个type传递给后续定义处。