TypeScript

什么是TypeScript

TypeScript是JavaScript的超集,TypeScript扩展了JavaScript的语法,TypeScript编译成JavaScript,让TypeScript可以运行在任何浏览器和Node环境中。TypeScript是一种给JavaScript添加特性的语言扩展。

为什么要使用TypeScript

TypeScript增加了代码的可读性和可维护性。TypeScript增加了编译时的类型检查,使得很多错误在开发时就被发现。

TypeScript特点

支持最新的JavaScript新特性。
支持代码静态检查。
支持如C C++等语言的代码特性(枚举、泛型、接口、类…)。

安装

yarn global add typescript

查看版本

tsc -v

编译

tsc 路径+文件名

编译并监听

tsc 路径+文件名 -w

配置文件

tsc --init
{
   
  "compilerOptions": {
   
    "target": "es2016", *// 指定编译后 ECMAScript 的版本*
    "module": "commonjs", *// 指定模块系统 commonJS、AMD...*
    "sourceMap": true, *// 生成 sourceMap 文件*
    "outDir": "./dist", *// 指定输出目录*
    "rootDir": "./src", *// 指定输入目录*
    "strict": true *// 启用所有严格类型检查选项*
    ...
  }
}

基本类型

 let str:string = 'hello ts!';
 let und:undefined = undefined;
 let nu:null = null;
 let bool:boolean = true;
 let sy:symbol = Symbol(); 

特殊类型 (any、unknown、never、void)

any:表示任意类型,可以被赋予任何类型的值,并且对这些值不做任何类型检查。

unknown:更安全的 any 类型,代表了一个未知的类型。当确实不知道一个值的确切类型,但是又希望保持类型检查时使用。

never:表示永远不应该发生的值。比如抛出错误或者死循环,那么该函数永远不会执行完,不可能有返回值。

void:表示没有类型,通常用于表示函数没有返回值。

 let any1:any;
 any1 = 1;
 any1 = 'a';
 any1 = true;

 let unk:unknown = 5;
 if(typeof(unk) === 'number'){
   
 	console.log(unk * 2)
 } 

 function throwError(message: string): never {
   
 	throw new Error(message);
 }
 try {
   
 	throwError("Something went wrong!");
 } catch (error) {
   
 	console.error(error); // 输出: Something went wrong!
 }

 function fn(m:string): void {
   
	console.log(m)
 }

值类型

 let uname: 'james' = 'james'
 uname = 'kd' // 不能将类型kd分配给类型"james"。

数组和元组

  • 数组:使用类型 [] 来表示。
// 普通数组
let arr: string[] = ['a', 'b', 'c'];
let arr1:Array<number> = [1, 2, 3];

// 二维数组
let arr: number[][] = [
  [1, 2],
  [3, 4],
];
  • 元组:元组可以包含不同类型的元素,并且元素的类型、位置、数量都是确定的。
    注意:给原本数组继续添加数据时,后添加的数据必须是前面数据的类型中的一个。
let tuple: [number, string] = [1, "hello"];
tuple.push("A");

对象

注意:对于对象来说,应该限定对象中每个属性的类型,而不是限定对象这个整体的类型。

  • 定义对象
// 不推荐
let obj:object; 
obj = [];
obj = {
   };
obj = function (){
   }


let user: {
    name: string; age: number } = {
   
  name: "张三",
  age: 18,
};
  • 可选属性:在属性后面加上问号(?),表示该属性可有可无。
    注意:一个对象中可以有任意多个可选属性。
let user: {
    name: string; age?: number } = {
    name: "张三" };
  • 任意属性:在已有属性后,用中括号([])括起来。
    注意
    一个对象只能有一个任意属性。
    任意属性表示多个其他的属性,值的类型必须与定义时一致。
    任意属性的类型一定是其他类型的父类,也就是必须要包含其他类型,比如:any包含string,但是number就不包含string。
let user: {
    name: string; [propName: string]: string } = {
   
  name: "张三丰",
  address: "北京",
  id: "xxx01",
};
  • 只读属性:在属性前面加上readonly,表示该属性值不能被修改。
    注意:一个对象中可以有任意多个只读属性。
let user: {
    readonly name: string; age: number } = {
   
  name: "张三",
  age: 18,
};

内置对象

let sym: symbol = Symbol("sym");
let date: Date = new Date();
let reg: RegExp = /[a-z]/;
let error: Error = new Error("error");
let allDiv: NodeList = document.querySelectorAll("div");
let body: HTMLElement = document.body;

函数

  • 定义
// 有返回值
function 
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值