typeScript

82 阅读5分钟

1、ts中的any和unknown有什么区别?

unknown和any的主要区别是unKnown类型会更加严格:在对unknown类型的值执行大多数操作之前,我们必须进行某种形式的检查。而在对any类型的值执行操作之前,我们不必进行任何检查。

8fb291d5-2ef9-4c87-93b4-eba58ba5e916.png

因为bar是一个未知类型(任何类型的数据都可以赋值给unknown类型),所以能确定是否有msg属性。不能通过TS语法检测;而unknown类型的值也不能将值赋给any和unknown之外的类型变量

总结

any和unknown都是顶级类型,但是unknown更加严格,不像any那样不做类型检查,反而unknown因为未知性质,不允许访问属性,不允许赋值给其他有明确类型的变量。

2、说说你对typescript的理解?与javascript的区别?

2.1、ts是什么?

TypeScript是JavaScript的类型的超集,支持ES6语法,支持面向对象编程的概念。如类、接口、继承、泛型等 其是一种静态类型检查的语言,提供了类型的注解,在代码编译阶段就可以检查出数据类型的错误 同时扩展了JS的语法,所以任何现有的js程序可以不加改变的在TS下工作

2.2、特性
  • ts的特性主要有如下:
  • 类型批注和编译时类型检查:在编译时批注变量类型
  • 类型推断:ts中没有批注变量类型会自动推断变量类型
  • 类型擦除:在编译过程中批注的内容和接口会在运行时利用工具擦除
  • 接口:ts中用接口来定义对象类型
  • 枚举:用于取值被限定在一定范围内的场景
  • Mixin:可以接受任意类型的值
  • 泛型编程:写代码是使用一些以后才指定的类型
  • 名字空间:名字只在该区域内有效,其他区域可重复使用改名字而不冲突
  • 元组:元组合并了不同类型的对象,相当于一个可以装不同类型数据的数组
2.3、类型批注

通过类型批注提供在编译时启动类型检查的静态类型,这是可选的,而且可以忽略而使用js常规的动态类型

function Add(left: number, right: number): number {
 return left + right;
}

对于基本类型的批注是number、boolean和string,而弱类型或动态类型的结构则是any类型

2.4、类型推断

当类型没有给出时,ts编译器利用类型推断来推断类型,如下:

let str = 'string'

变量str被推断喂字符串类型,这种推断发生在初始化变量和成员,设置默认参数值和决定函数返回值时 如果由于缺乏声明而不能推断出类型,那么它的类型被视作默认的动态any类型

2.5、接口

接口简单来说就是用来描述对象的类型,数据的类型有number、null、string等数据格式,对象的类型就是用接口来描述的,例如:

interface Person {
    name: string;
    age: number;
}

let tom: Person = {
    name: 'Tom',
    age: 25
};
2.6、ts和js的区别
  • ts是js的超集,扩展了js的语法
  • ts可处理已有的js代码,并只对其中的ts代码进行编译
  • ts文件的后缀名.ts(.ts, .tsx, .dts),js文件是 .js
  • 在编写ts的文件的时候就会自动编译成js文件

3、为什么推荐使用TypeScript?

ts是微软公司开发和维护的一种面向对象的编程语言。它是js的超集,包括js所有元素。 强类型和弱类型、静态类型和动态类型是两组不同的概念。 类型的强弱是针对类型转化是否显示来区分,静态和动态类型是针对类型检查的时机来区分。 ts对js的改进主要是静态类型检查,静态类型检查有何意义?标准答案是‘静态类型更有利于构建大型应用’

推荐使用ts的原因有:

  • ts简化了js代码,使其更易于阅读和调试
  • ts是开源的
  • ts为JavaScript ide和实践(如静态检查)提供了高效的开发工具
  • ts使代码更易于阅读和理解。
  • 使用ts,我们可以大大改进普通的js
  • ts为我们提供了es6的所有优点,以及更高的生产效率
  • ts通过对代码进行类型检查,可以帮助我们避免在编写js时经常遇到令人痛苦的错误
  • 强大的类型系统,包括泛型
  • ts代码可以按照es5和es6标准编译,以支持最新的浏览器
  • 与es对齐以实现兼容性
  • 以js开始和结束
  • 支持静态类型
  • ts将节省开发人员的时间
  • ts是es3、es5、es6的超集

4、TypeScript的内置数据类型有哪些?

数字类型:用于表示数字类型的值。ts中的所有数字类型都存储为浮点值。

let identifier: number = value;

布尔类型:一个逻辑二进制开关,包含true或false

let identifier: string = " ";

null类型:null表示值未定义的变量

let identifier: bool = Boolean value;

未定义类型:一个未定义的字面量,它是所有变量的起点

let num: number = null;

void类型:分配给没有返回值的方法的类型

let unusable: void=undefined;

5、TypeScript中的变量以及如何声明?

变量是内存中用于存储值的命名空间。 在ts中声明变量的类型语法在变量名称后包括一个冒号(:),后跟其类型。与js相似,我们使用var关键字声明变量。 在ts中声明变量时,必须遵循某些规则:

  • 变量名称必须是字母或者数字
  • 不能以数字开头名称
  • 除下划线( _ )和美元( $ )符号外,它不能包含空格和特殊字符串

6、ts中的泛型是什么

ts