TypeScript实践 | 青训营

54 阅读1分钟

这是第六届青训营的第三篇实践笔记

在写大项目的时候使用了ts,遇到了许多因为设置了ts.config导致报红的问题。 以本次大项目使用的为例,来介绍ts泛型以及设置等问题。

tsconfig.json

本次项目所使用的配置

    /* Linting */
    /* 严格检查选项 */
    "strict": true, // 开启所有严格的类型检查
    "alwaysStrict": true, // 在代码中注入'use strict'
    "noImplicitAny": false, // 不允许隐式的any类型
    "noImplicitThis": true, // 不允许this有隐式的any类型
    "strictNullChecks": true, // 不允许把null、undefined赋值给其他类型的变量
    "strictBindCallApply": true, // 严格的bind/call/apply检查
    "strictFunctionTypes": true, // 不允许函数参数双向协变
    "strictPropertyInitialization": true, // 类的实例属性必须初始化

为什么要使用tsconfig.json

通常我们可以使用 tsc 命令来编译少量 TypeScript 文件.

但如果实际开发的项目,很少是只有单个文件,当我们需要编译整个项目时,就可以使用 tsconfig.json 文件,将需要使用到的配置都写进 tsconfig.json 文件,这样就不用每次编译都手动输入配置,另外也方便团队协作开发

TS泛型

在不定义类型时类型不明确,用target指代

function getRepeatArr(target){
  return new Array(100).fill(target)}
  
type IGetRepeatArr = (target:any) => any[]
​
type IGetRepeatArrR = <T>(target: T) => T[]

泛型不止应用在函数中

泛型约束:使用extends

type IGetRepeatStringArr = <T extends string> 限制泛型必须符合字符串

泛型参数默认类型

type IGetRepeatArr<T = number> =(target:T)

默认了数据类型为number类型

这两者是有区别的。