一.TpyeScript基础数据类型

1.基础数值类型

number类型:双精度64位浮点值。它可以用来表示整数和分数。boolean类型:表示逻辑值:true和 false。
string类型:一个字符系列,使用单引号(')或双引号(")来表示字符串类型。反引号(`)来定义多行文本和内嵌表达式

//基础数据类型
//let var  count
//数值类型
let num;
num = 100;
//num="诺兰"
num = 3.14;
console.log(num);
//布尔型
let flag: boolean;
flag = true;
flag = false;//字符串型
let beauty: string;
beauty = "盗梦空间";
let dream = `我最喜欢的影片是${beauty}`
console.log(dream);

2.数组

//数组的基本使用
//方法一
let beautyArr:string[];
beautyArr=["斯皮尔伯格","诺兰","昆汀"]
console.log(beautyArr);//方法二
let numArr:Array<number>;
numArr=[1,2,3,4]//方法三  联合类型
let myBeauty:(number|string|boolean)[];
myBeauty=["斯皮尔伯格","诺兰","昆汀",20]
myBeauty=["斯皮尔伯格","诺兰","昆汀",20,true]//方法四  任意类型
let test:any[]
test=["斯皮尔伯格","诺兰","昆汀",20,true]

3.元组

let tup1:[string,boolean,number]
tup1=["昆汀",false,30]
//tup1=[30,"昆汀",false] 报错 按顺序来
//tup1=["昆汀",false,30,90] 报错  超出
console.log(tup1);

4.any与void

// any类型
// any表示任意类型,当我们不清楚某个值的具体类型的时候我们就可以使用any在Ts中任何数据类型的值都可以负责给any类型// 使用场景一
// 变量的值会动态改变时,比如来自用户的输入,任意值类型可以让这些变量跳过编译阶段的类型检查
let temp:any;
temp="王祖贤"
temp=18
temp=true//使用场景二
//改写现有代码时,任意值允许在编译时可选择地包含或移除类型检查let x:any=4;
x.fn()
console.log(x.toFixed());//使用场景三
//定义存储各种类型数据的数组时
let arr :any[]=["刘亦菲",18,true];
console.log(arr[0]);// void类型
//某种程度上来说,void类型像是与any类型相反,它表示没有任何类型。
//当一个函数没有返回值时,你通常会见到其返回值类型是void
//在TS中只有null和undefined可以赋值给void类型function test():void{console.log("笑着说爱让人疯狂,哭着说爱让人紧张");console.log("忘不了那个人就投降");
}
test()let test1:void;
// test1="林俊杰"
// test1=18
// test1=true// test1=null
test1=undefined

5.null与undefined

TypeScript里,undefined和null两者各自有自己的类型分别叫做undefined和null.
和void相似,它们的本身的类型用处不是很大


let x:undefined=undefined
let y:null=null;let money:number=100;
// money=null;
// money=undefined;

6.never与object

Never类型

never类型表示的是那些永不存在的值的类型

例如: never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型//变量也可能是 never类型,当它们被永不为真的类型保护所约束时。

返回never的函数必须存在无法达到的终点

function error(message:string):never{throw new Error(message)
}
error("出错了~")//推断的返回值类型为never
function fail(){return error("GG了~")
}//返回never的函数必须存在无法到达的点
function loop():never{while(true){}
}

Object类型

表示一个对象

定义了一个只能保存对象的变量

let goddess:object;
goddess={name:"关之琳",age:20
}
console.log(goddess);

7.枚举

enum Sex{Male,Female
}
let sex:Sex;
sex=Sex.Male;
// sex=Sex.Female
console.log(sex);enum Sex{Male=1,Female
}
console.log(Sex.Male);//1
console.log(Sex.Female);//2enum Sex{Male=1,Female=5
}
//注意点:如果手动指定了后面枚举值的取值,那么前面枚举值的取值不会受到影响
console.log(Sex.Male);//0
console.log(Sex.Female);//5enum Sex{Male=100,Female=200
}
console.log(Sex.Male);//100
console.log(Sex.Female);//200enum Sex{Male,Female
}
console.log(Sex.Male);//0
console.log(Sex[0]);//Maleconst getNum=()=>200let sex:Sex;
sex=Sex.Female;
sex=100;
sex=getNum();//字符串枚举
enum Direction{Up="Up",Down="Down"
}
console.log(Direction.Up);
console.log(Direction.Down);
console.log(Direction[0]); //undefined
console.log(Direction["Up"]);let x:Direction;
x=Direction.Down;
x="左"const getDirection=()=>"右";
x=getDirection()enum Sex{Male=1,Female="女"
}
console.log(Sex.Male);//1
console.log(Sex.Female);//女
console.log(Sex[1]);//Male
// console.log(Sex["女"]);//undefined

8. bight与symbol

   // bight类型:表示非常大的数// symbol类型:表示全局唯一引用// ES2020可用const Hundred1: bigint = BigInt(100)const Hundred2 : bigint = 100nlet firstName = Symbol("name")let secondName = Symbol("name")if (firstName === secondName) {console.log("我们一样")}else{console.log("我们不一样");}

9.解构赋值

//数组解构
let goddess=["王祖贤","关之琳"];
let [firstName,secondName]=goddess;
console.log(firstName);
console.log(secondName);let goddess2=["王祖贤","关之琳","张曼玉","利智"];
let[third,...rest]=goddess2;
console.log(third);
console.log(rest);let goddess3=["王祖贤","关之琳","张曼玉","利智"];
let [,forth,,fifth]=goddess3;
console.log(forth);
console.log(fifth);//对象解构
let beauty={uname : "杨超越",age: 20,sex: "女",
}
let {uname,age,sex} = beauty;
console.log(uname);
console.log(age);
console.log(sex);

10.类型断言

let str:any ="世界上最遥远的距离就是,你是if而我是else,似乎一直相伴但又永远相离";
// //方式一
let len=(<string>str).length
// //方式二
let num=(str as string).lengthconsole.log(len);
console.log(num);function typeAs(x:number|string){let len=(<string>x).length //let len=(x as string)console.log(len)}
typeAs("世界上最遥远的距离就是,你是if而我是else,似乎一直相伴但又永远相离")

11.type别名

type beautys="斗战胜佛"|"齐天大圣"|"弼马温"|"孙行者"let one:beautys;
// one=1;
// one=true;
// one="大师兄"
one="斗战胜佛"//第二种 定义别名
type myfun = (a:number,b:number) =>number;
//声明具体函数
let fun:myfun = (a:number,b:number) =>a + b;
let result=fun(10,20);
console.log(result);type myGoddass={name: string,age: number,sex:boolean
}
let yifi:myGoddass={name: "刘亦菲",age:18,//sex:"男"//报错,不符合定义的类型sex:true
}
console.log(yifi);

二.接口

1.接口的基本使用

interface IFullName{firstName:stringlastName : string
}
let goddassName :IFullName={firstName: "关",lastName:"之琳"
}
console.log(goddassName.firstName ,goddassName.lastName);function say({firstName,lastName}:IFullName):void{console.log(`我的女神是${firstName}${lastName}`);}
say(goddassName)

2.可选属性和只读属性

//可选属性  用?修饰
interface IFullName{firstName:stringlastName : stringage?:number
}let goddass:IFullName={firstName:"邱",lastName:"淑贞",// age:18
}//只读属性 readonly(就是只能看,不能修改值)
interface IInfo{readonly name:string,readonly age:number
}
let info:IInfo={name:"王祖贤",age:20
}
// info.name="林青霞"
// info.age=21

3.索引签名

//解决参数可多可少的问题
//方案一:使用可选参数
interface IFullName{firstName:stringlastName : stringage?:number
}
let goddass1:IFullName={firstName:"邱",lastName:"淑贞",age:18
}
let goddass2:IFullName={firstName:"邱",lastName:"淑贞",// age:18
}//方案二 使用变量
let info={firstName:"王",lastName:"祖贤",age:20,song:"倩女幽魂"
}let goddass3:IFullName=info//方案三 使用类型断言let goddass4:IFullName=({firstName:"王",lastName:"祖贤",age:20,song:"倩女幽魂",tv:"人鬼殊途"
}) as IFullName//索引签名
interface IBeauty{[props:string]:string
}
let goddass5={firstName:"王",lastName:"祖贤",song:"倩女幽魂"
}
interface IAge{[props:string]:number
}
let ages={age1:10,age2:20,age3:30,
}
interface IMyFullName{firstName:stringlastName : string[props:string]:string
}
let goddass6={firstName:"王",lastName:"祖贤",sex:"女",mobile:"123456789"
}
let goddass7={firstName:"王",lastName:"祖贤",tv:"小倩"
}

4.函数接口

  //定义函数接口interface ImakeMoney {(salary:number,reward:number):number}let sum:ImakeMoney = function (x:number,y:number ): number {return x + y;}let res = sum(10,20);console.log(res);

5.接口的继承

//单继承
interface IPerson {age : number
}interface IName extends IPerson {name : string
}
let lady : IName = {name : "邱淑贞", age: 18
}//多继承
interface IFatherMoney {m1: number
}
interface IMotherMoney {m2: number
}
interface ISonMoney extends IFatherMoney,IMotherMoney {s1 :number}
let money :ISonMoney = {m1:100,m2 : 100,s1: 100}
console.log(`儿子一共有${money.m1 + money.m2 + money.s1}万元`);

6.接口与类型别名的异同

1.相同点:

都可以描述属性或方法

都允许拓展

2.不同点:

type可以声明基本数据类型,联合类型,数组等; interface只能声明变量

当出现使用type和interface声明同名的数据时;type会直接报错;interface会进行组合

type不会自动合并; interface会

type womanStar={name: stringage: numbershow():void
}
interface IwomanStar{name : stringage:numbershow():void
}let star1:womanStar={name:"邱淑贞",age: 18,show(){console.log("赌神2");}
}
let star2:womanStar={name:"王祖贤",age: 18,show(){console.log("倩女幽魂");  }
}
//都允许扩展
type money1={x1:number
}
type money2=money1&{x2:number
}
let money:money2={x1:10,x2:20
}interface IStar1{name:string
}
interface IStar2 extends IStar1{age:number
}
let star:IStar2={name:"邱淑贞",age:18
}
//type可以声明基本数据类型,联合类型,数组等; interface只能声明变量
type t1=number;
type t2=number | string;
type t3=[ number | boolean]//当出现使用type和interface声明同名的数据时;type会直接报错;
// type myName={
//     name : string
//     }
// type myName={
//      name : string
//     }interface IMyName{name : string
}
interface IMyName{name : stringage:number
}
let myName:IMyName={name:"佟丽娅",age:23}//interface会进行组合
// type不会自动合并; interface会

TpyeScript基础相关推荐

  1. java入门 慕路径,Java入门基础知识总结学习教程大全【必看经典】

    类型的表达式,是循环条件,表达式3是党执行了一遍循环之后,修改控制循环的变量值. ??? for语句的执行过程是这样的:首先计算表达式1,完成必要的初始化工作:然后判断表达式2的值,如果表达式的值为t ...

  2. 提交表单自动刷新_Web自动化测试:元素的基础操作和浏览器基础操作

    上一节,我们了解了如何定位元素,其实也有涉及对于元素的操作,这一节我们就详细的介绍一下对于元素的操作和对于浏览器的一些操作 一.对于元素的基础操作: clear():清除输入框内的文本 send_ke ...

  3. java mybatis基础

    java mybatis基础 1.1 什么是mybatis? mybatis是一个优秀的持久层框架. 避免几乎所有的JDBC代码和手动设置参数以及获取结果集的过程. 可以使用简单的xml或者注解来配置 ...

  4. 【J2SE】学习基础

    Java基础 语法基础 OO Exception Array 基础类 I/O Stream Collection/Generic Thread TCP/UDP GUI Meta Data Regula ...

  5. 【Linux系统】基础总结

    我不太清楚运维部门具体是做什么的,就接触过一点点运维部门! 也就是是知道他们负责管理服务器,管理网络,管理项目部署 偶尔自己需要部署,不得不接触一些linux命令.简单总结一些基础 linux系统发展 ...

  6. 【Java 2 Platform Enterprise Edition】基础

    问题1:为什么java是无关平台? 你之前用C或者C++写的源代码,编译好后,换一种操作系统,可能就执行不了了.因为新的操作系统不识别,你需要修改你的源码,并在新的操作系统上重新编译才能运行,比如Wi ...

  7. SpringCloud Alibaba微服务实战(一) - 基础环境搭建

    说在前面 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来 ...

  8. Redis概述和基础

    Redis 1.NoSQL NoSQL = Not Only SQL(不仅仅是SQL) 泛指非关系型数据库的,随着web2.0互联网的诞生!传统的关系型数据库很难对付web2.0时代!尤其是超大规模的 ...

  9. pass基础架构分析

    pass基础架构分析 Relay 和 TVM IR,包含一系列优化passes,可提高模型的性能指标,如平均推理,内存占用,或特定设备的功耗.有一套标准优化,及特定机器学习的优化,包括常量折叠,死代码 ...

最新文章

  1. 服务化部署框架Paddle Serving
  2. arduino与java,Arduino具有与Java和C语言类似的IDE集成开发环境和图形化编程环境
  3. 【学习笔记】 Python - Pandas
  4. 云炬Android开发笔记 16附加功能开发(二维码,一键分享,分页,搜索)
  5. 关于ORM中只有XML没有映射实体的思考?期待大家的建议
  6. SAP CRM WebClient UI Selenium UiElementHandler的实现
  7. 人工智障学习笔记——机器学习(9)最大期望算法
  8. django render_(django/flask/bottle)多框架python-restful接口包api-shop
  9. 抖音春晚红包百亿互动量级背后,火山引擎浮出水面
  10. MathType 的使用
  11. macOS Mojave 10.14.6 ISO/CDR 虚拟机镜像下载
  12. 利用Powrshell 查看在2000万信息中看看自己在不在所谓的开房信息中!
  13. 西门子1200plc与施耐德变频器modbus通讯程序
  14. docker X509 证书错误的终极终极终极解决
  15. [SSL_CHX][2021-8-19]空瓶换饮料
  16. Android 之 自动拨号
  17. 【面试篇】ConcurrentHashMap1.7和1.8详解对比
  18. CSS的3d翻滚特效
  19. openstack 遇到的error
  20. 【学习笔记】VGG 网络结构

热门文章

  1. 二、计算机网络知识汇总
  2. 2021爱智先行者—数量遗传学 第一章 数量遗传学概论
  3. 密码的修改(首先获取该用户的id,原密码判断是否一致,新密码和再次输入密码判断是否一样)...
  4. MacBookPro M1芯片安装brew
  5. ubuntu server 14.04 编译安装xen4.4.2配置vtpm(三)——创建DomU(a PV VM)
  6. C65升级与补丁 V25->V43DIY全程
  7. VB里的 dim是什么意思?
  8. Vscode_00_安装Vscode和搭建C/C++开发环境
  9. Unity创建 .asset配置文件的方式
  10. 笔记——51控制DS18B20温度控制篇章之终章温度报警