TypeSrcript笔记

214 阅读2分钟

初识

  • 类型注解name: string
    • 为函数或变量添加约束
    • 也会静态的检查代码,例如参数数量是否为函数预期的数量
  • 接口interface name {key:type}
    • 理解为对一组key:type的提取定义,你可以将函数的变量接受处使用对象接口。
  • class name { }
    • 像java一样在class中使用key :type为类定义属性
    • 在constructor里使用public定义参数相当于创建了同名的成员变量

接下来,我们要添加开发时依赖awesome-typescript-loadersource-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文件,包含了输入文件列表以及编译选项。 image.png

类型

  • 布尔值: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传递给后续定义处。 image.png