1、ts中的any和unknown有什么区别?
unknown和any的主要区别是unKnown类型会更加严格:在对unknown类型的值执行大多数操作之前,我们必须进行某种形式的检查。而在对any类型的值执行操作之前,我们不必进行任何检查。
因为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