美文网首页
TypeScript

TypeScript

作者: 高阳刘 | 来源:发表于2020-11-04 18:53 被阅读0次
ts的介绍

1、TypeScript是有微软开发的
2、一款开源的编程语言
3、TypeScript 是JavaScript的超级,遵循最新的ES6,ES5规范。TypeScript扩展了JavaScript的语法
4、TypeScript更像是后端java、C#这样的面向对象语言,可以让js开发大型企业项目
5、谷歌也在大力支持TypeScript的推广,谷歌的angular2.x+就是基于TypeScript语法
6、最新的Vue、React也可以集成TypeScript

作用

TypeScript的设计目应该是解决JavaScript的“痛点”:
1、弱类型和没有命名空间,导致很难模块化
2、不适合开发大型程序
3、提供了一些语法糖来帮助大家更方便地实践面向对象编程。(类、接口、枚举、泛型、方法重载等)
4、TypeScript的一个设计亮点就是它并没有抛弃JavaScript的语法另起炉灶,而是做成了JavaScript的超集(这个功劳应该记在Anders上),这样任何合法的JavaScript的语句在TypeScript下都是合法的,也就是说学习成本很低

ts的编译安装
# 安装typescript
npm install -g typescript
# 根据helloworld.ts创建转化一个helloworld.js文件
tsc helloworld.ts
# 创建tsconfig.json 
tsc --init
#修改tsconfig.json配置,输出文件
"outDir": "./js", 
#自动监听.ts文件,修改相应的.js文件
VsCode --> 导航栏Terminal --> Ran Task --> typescript --> tsc: watch - tsconfig.json
ts的数据类型

1、TypeScript 中为了使编写的代码更规范,更有利于维护,增加了类型校验
2、在TypeScript中主要给我们提供了一下数据类型

布尔类型(boolean)
let isDone:boolean = true;
isDone = false;
// 直接调用Boolean是可以的
let is:boolean = Boolean(1)
// 错误方式:因为 new Boolean 返回的是一个对象类型
 let isCheck:boolean = new Boolean(1)
数字类型(number)
 let num:number = 1;
 let num16:number = 0xf00a;
 let notNum:number = null;
 let infNum:number = Infinity;
 let undeNum:number = undefined;
字符串类型(string)
let userName:string = "gaoyangliu";
let age:number = 18;
let str:string = `我的年龄是${age}`
数组类型(array)
// 设定数组的类型
let arr:number[] = [1,2,3];
arr.push("1") # 会报错,不允许
// 数组泛型的定义方式
let arr2:Array<number> = [1,2,3]; # 元组类型
let arr3:any[] = [1,2,"3"];
// 接口表示数组类型
interface NumberArray {
  [index:number]:number
}
let arr4:NumberArray = [1,2,3]
元组类型(tuple)
枚举类型(enum)

随着计算机的不断普及,程序不仅只用于数值计算,还更广泛地用于处理非数值的数据,
例如:性别、月份、星期几、颜色、单位名、学历、职业等,都不是数值数据。
在其他程序是语言中,一般用一个数值来代表某一状态,这种处理方法不直观,易读性差
如果能在程序中用自然语言中有相应含义的单词来代表某一状态,则程序就很容易阅读和理解
也就是说,事先考虑得到某一变量可能取的值,尽量用自然语言中含义清楚的单词来表示它的每一个值
这种方法称为枚举方法,用这种方法定义的类型称为枚举类型

enum Num { a, b, c };
let a:Num = Num.a;
let b:Num = Num.b;
let c:Num = Num.c;
console.log(a,b,c)  # 0 1 2 打印下标

enum Num { a, b=3, c };d
let a:Num = Num.a;
let b:Num = Num.b;
let c:Num = Num.c;
console.log(a,b,c)  # 0 3 4 # 有赋值,则按照赋值延续
任意类型(any)
// 允许访问任意属性
#原生dom获取用的比较多
let oBox:any = document.getElementById('box');
null和undefined
// 在ts中如果想定义变量但是不复制,可以使用undefined
let num:number;
console.log(num) # 错误
let num:undefined;
console.log(num) # 正确
let num:number | undefined;
console.log(num) # 正确

// null和undefined可以互相复制,但是不可以复制其他类型
 let a:undefined = undefined;
 a = null;
 let b:null = null;
 b = undefined;
// null和undefined是所有类型的子类型,void类型是不能复制给其他类型的,虽然他也只有null和undefined
let userName:string = "gaoyangliu";
userName = undefined;
userName = null;

let a:undefined = undefined;
let b:void = undefined;
userName = a;
userName = b; # 这是不允许,因为b是void类型
void类型
function get():number{
    return 1
}
//  空值,一般用于定义方法没有返回值,
function get():void{
    console.log("没有返回值")
}
// 一般不用于定于变量,因为一旦定义变量为void类型,那么就只能复制undefined,null
 let unable:void = undefined;
 unable = null;
never类型
// 代表从来不会出现的值(报错,抛出异常)
let a:never;
a = (()=>{
    throw new Error('这是一个错误')
})()
函数的定义
// TypeScript会对函数输入输出有约束,输入和输出会定义类型,参数传入(参数定义类型),返回值(定义类型)
function sum(x:number, y:number):number{
  return x+y;
}
sum("1", 2) # 报错
sum(1, 2)
// 函数表达式, 这种写法实质上仅将右侧的匿名函数进行了类型的定义,对于左边sum这个变量没有实质的定义
let sum = function(x:number, y:number):number{
    return x+y;
}
// => 在TypeScript中用于函数的定义,左边是输入的类型,右边是输出的类型
let sum2:(x:number, y:number) => number = function(x:number, y:number):number {
  return x+y
}
// 在TypeScript中函数的参数,是不能随意传任意数量的值
sum(2,1)
函数的传参
function getInfor(name:string, age:number):string{
    return `${name} --- ${age}`
}
console.log(getInfor("张三", 10))
方法的可选参数
// 注意可选参数必须配置到参数的最后面,可选参数后面不允许放置必须要的参数
// 正确写法
function getInfor(name:string, age?:number):string{
    return age ? `${name} --- ${age}` : `${name} --- 年龄保密`
}
console.log(getInfor("张三"))
// 错误写法
function getInfor(name?:string, age:number):string{
    return age ? `${name} --- ${age}` : `${name} --- 年龄保密`
}
参数的默认值
function sum(x:number=1, y:number=2):number{
  return x+y;
}
剩余参数
function sum(...items){
// es6正常模式
}
function sum(...items:any[]){
}
重载

允许一个函数,接受不同数量或者类型的参数

function setA(x:number|string):number|string{
  return x;
}
TypeScript接口

什么是接口,行为的抽象,具体行为需要由类去实现(接口抽象出来的内容),相当于定义类的描述。

// 约束tom这个对象,必须和接口一致属性,
// 一般接口的首字母大写。
// 用接口定义的对象,属性不能多写,也不能多写
interface Person {
  name: string;
  age: number;
}
let tom:Person = {
  name: "gaoyangliu",
  age: 18
}

// 接口属性可选,该属性可写,可不写,但是不能多写属性
interface Student {
  name: string;
  age?: number;
}
let s1:Student = {
  name: "gaoyangliu"
}

// 任意属性
interface Teacher {
  name: string;
  [propName:string]:any
}
let t1:Teacher = {
  name: "gaoyangliu",
  age: 18
}

// 只读属性,只能进行一次赋值,不能修改
interface Cat {
  readonly name: string;
  color: string
}
let c1:Cat = {
  name: "橘猫",
  color: "橘色"
}
c1.name = "波斯猫"; # 报错,因为c1.name是只读属性
c1.color = "白色";

// implements,类实现接口的关键词
class SmallCat implements Cat {
  name:string = "小猫";
  color:string = "黑色";
  constructor(){
  }
}
let c2 = new SmallCat();
console.log(c2.name)

相关文章

网友评论

      本文标题:TypeScript

      本文链接:https://www.haomeiwen.com/subject/deawvktx.html