👩 个人主页:不爱吃糖的程序媛
🙋♂️ 作者简介:前端领域新星创作者、CSDN内容合伙人,专注于前端领域技术,成长的路上共同学习共同进步,一起加油呀!
✨系列专栏:前端面试宝典、JavaScript进阶、vue实战
📢 资料领取:前端进阶资料以及文中源码可以在🎈公众号【不爱吃糖的程序媛】领取
一、typescript是什么
typescript
是 javascript
的超集,在javascript
基础上提供了更加实用的类型供开发使用;
支持ES6
语法,支持面向对象编程的概念,如类、接口、继承、泛型等;
其是一种静态类型检查的语言,提供了类型注解,在代码编译阶段就可以检查出数据类型的错误;
同时扩展了 JavaScript
的语法,所以任何现有的 JavaScript
程序可以不加改变的在 TypeScript
下工作;
为了保证兼容性,TypeScript
在编译阶段需要编译器编译成纯 JavaScript
来运行,是为大型应用之开发而设计的语言。
二、typescript有哪些数据类型
typescript
的数据类型主要有如下:
- boolean(布尔类型)
- number(数字类型)
- string(字符串类型)
- array(数组类型)
- tuple(元组类型)
- enum(枚举类型)
- any(任意类型)
- null 和 undefined 类型
- void 类型
- never 类型
- object 对象类型
boolean
布尔类型
let flag:boolean = true;
// flag = 123; // 错误
flag = false; //正确
number
数字类型,和javascript
一样,typescript
的数值类型都是浮点数,可支持二进制、八进制、十进制和十六进制
let num:number = 123;
// num = '456'; // 错误
num = 456; //正确
进制表示:
let decLiteral: number = 6; // 十进制
let hexLiteral: number = 0xf00d; // 十六进制
let binaryLiteral: number = 0b1010; // 二进制
let octalLiteral: number = 0o744; // 八进制
string
字符串类型,和JavaScript
一样,可以使用双引号("
)或单引号('
)表示字符串
let str:string = 'this is ts';
str = 'test';
作为超集,当然也可以使用模版字符串``进行包裹,通过 ${} 嵌入变量
let name: string = `Gene`;
let age: number = 37;
let sentence: string = `Hello, my name is ${ name }
array
数组类型,跟javascript
一致,通过[]
进行包裹,有两种写法:
方式一:元素类型后面接上 []
let arr:string[] = ['12', '23'];
arr = ['45', '56'];
方式二:使用数组泛型,Array<元素类型>
:
let arr:Array<number> = [1, 2];
arr = ['45', '56'];
tuple
元祖类型,允许表示一个已知元素数量和类型的数组,各元素的类型不必相同
let tupleArr:[number, string, boolean];
tupleArr = [12, '34', true]; //ok
typleArr = [12, '34'] // no ok
赋值的类型、位置、个数需要和定义(生明)的类型、位置、个数一致
enum
enum
类型是对JavaScript标准数据类型的一个补充,使用枚举类型可以为一组数值赋予友好的名字
enum Color {Red, Green, Blue}
let c: Color = Color.Green;
any
可以指定任何类型的值,在编程阶段还不清楚类型的变量指定一个类型,不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查,这时候可以使用any
类型
使用any
类型允许被赋值为任意类型,甚至可以调用其属性、方法
let num:any = 123;
num = 'str';
num = true;
定义存储各种类型数据的数组时,示例代码如下:
let arrayList: any[] = [1, false, 'fine'];
arrayList[1] = 100;
null 和 和 undefined
在 JavaScript
中 null
表示 “什么都没有”,是一个只有一个值的特殊类型,表示一个空对象引用,而undefined
表示一个没有设置值的变量
默认情况下null
和undefined
是所有类型的子类型, 就是说你可以把 null
和 undefined
赋值给 number
类型的变量
let num:number | undefined; // 数值类型 或者 undefined
console.log(num); // 正确
num = 123;
console.log(num); // 正确
但是ts
配置了--strictNullChecks
标记,null
和undefined
只能赋值给void
和它们各自
void
用于标识方法返回值的类型,表示该方法没有返回值。
function hello(): void {
alert("Hello Runoob");
}
never
never
是其他类型 (包括null
和 undefined
)的子类型,可以赋值给任何类型,代表从不会出现的值
但是没有类型是 never 的子类型,这意味着声明 never
的变量只能被 never
类型所赋值。
never
类型一般用来指定那些总是会抛出异常、无限循环
let a:never;
a = 123; // 错误的写法
a = (() => { // 正确的写法
throw new Error('错误');
})()
// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
throw new Error(message);
}
object
对象类型,非原始类型,常见的形式通过{}
进行包裹
let obj:object;
obj = {name: 'Wang', age: 25};
三、typescript 和 javascript的区别?
1.类型系统
:JavaScript是一种动态类型语言,变量的类型在运行时确定,并且可以随意更改。而TypeScript引入了静态类型系统,允许开发人员在编译时声明变量的类型,并进行类型检查。这有助于在开发阶段发现和预防潜在的类型错误,提高代码的健壮性和可维护性。
2.类型注解
:在TypeScript中,可以使用类型注解来显式声明变量的类型,如let num: number = 10;。而在JavaScript中,不需要显式声明变量的类型,可以直接赋值。
3.语言特性
:TypeScript在JavaScript的基础上增加了一些新的语言特性,如类(Class)、接口(Interface)、枚举(Enum)等。这些特性使得代码结构更清晰、可读性更好,对于大型项目的维护和团队协作更加有益。
4.编译过程
:TypeScript需要通过编译器将TypeScript代码转换为可执行的JavaScript代码,然后在浏览器或Node.js环境中运行。而JavaScript代码可以直接在浏览器或Node.js中运行。
5.模块和导入
:TypeScript支持使用CommonJS、AMD或ES6等模块系统,并提供了对第三方库的类型定义支持。而JavaScript最初只支持简单的脚本形式,但随着ES6标准的引入,也增加了对模块系统的支持。
参考文献
- https://www.tslang.cn/docs/handbook/basic-types.html