TypeScript

163 阅读3分钟

TypeScript

- ts是一个强类型的JavaScript超集,增加了静态类型检查,在编码期间就能检测错误,而不是编译期间检测错误
- 自动完成和动态输入有助于提高开发效率
- 对阅读代码也是友好的

ts中的any、never、unknown、null和undefined和void的区别

any:为编程阶段还不清楚的变量指定一个类型,失去了类型检查的作用
never:永不在的值的类型。比如:总是会抛出异常或者根本就不会有返回值的函数表达式(无限循环)
    -- 在写if else/switch的时候对never类型赋值能及时抛出异常,避免case遗漏的情况
unknown:任何类型的值都可以赋给unknown类型,但是unknown只能赋给unknownany类型
null & undefined:默认情况下nullundefined是所有类型的子类型,就是说可以吧nullundefined赋值给number类型的变量。当指定了--strictNullChecks标记,nullundefined只能赋值给void和他们本身
    -- js中null表示一个‘空’的对象,转换为数值是0undefined表示一个空的原始值,转换为数值是NaN
void:如果函数没有返回值,那么返回值可以定义为void

interface和type的区别

- 都可以描述一个对象或者一个函数
- 都可以拓展(extends),而且可以交互拓展,效果差不多,语法不同
- type可以声明基本类型别名,联合类型,元组类型
    - 联合类型,表示取值可以为多种类型中的一种
    - 元组,数组合并了相同类型的对象,而元组(Tuple)合并了不同类型的对象。
- type还可以使用typeof获取实例的类型,进行赋值
- interface可以合并声明
- interface描述数据结构,type描述类型关系

keyof和typeof关键字的作用

keyof,获取索引类型的属性名,构成联合类型
typeof,获取变量的类型

类和接口有什么区别

接口只声明方法,不做实现,接口定义一种规范
类声明并实现方法

联合类型和交叉类型的区别

联合类型表示一个值的类型可以是几个类型中的一个,使用联合类型读取属性的时候,只能获取共同的属性名
交叉类型将多个类型合并为一个,使用交叉类型读取属性的时候,可以获取所有类型的所有属性名

如何使ts项目引入并识别编译为js的npm包

1. 选择按照ts版本,npm install @types/包名 --save
2. 对于没有类型的js库,需要编写同名的.d.ts文件

declare,declare global是什么

declare,定义全局变量、全局函数、全局命名空间、js modules、classdeclare global,为全局对象window增加新的属性

TypeScript的tsconfig.json中有哪些配置项信息

files 指定被编译文件的列表(只有需要编译的文件少时才会用到)
include 指定编译某些文件
exclude 排除哪些文件不需要编译
extends 指定一个其他的tsconfig.json文件路径,继承这个配置文件里的配置
compilerOption 
    -- target 指定目标版本
    -- module 指定使用模块
    -- paths 设置模块导入的路径别名
    -- noImplicitAny  不允许隐式Any