本文介绍TypeScript的基本语法使用 TypeScript基本语法使用 里面记录了TS不同类型的使用方式,涵盖到,number,string,boolean,字面量,any,unknwn,void,never,object,array,enum等的使用方法,通俗易懂。
基本语法使用(number,string,boolean,function)
基本语法使用(字面量类型,联合类型,any,unknown,void,never,类型断言)
基本语法使用(object,函数结构类型,数组类型,enum枚举,&和|使用,类型别名)
废话不多说,先上图
数字类型(number )
var a: number //定义一个数字类型的变量a
a = 10;
// a = "hello" //该代码会保错,因为 变量a的类型是number,不能赋值字符串 如下图
字符串类型(string)
//可以这样声明字符串类型的变量
var b :string
b = '欢迎学习ts'
// b = 123 //同理这样赋值数字类型也会报错
boolean类型(boolean)
//声明一个boolean 值
var c: boolean
//也可以声明的同时 直接赋值 比如
var d :boolean = false
函数类型:下面我们来解释一下这个函数,我们定义了一个函数sum,有两个参数a,b 他们都是数字类型 返回的值也是数字类型
//定义一个函数类型
function sum(a:number,b:number): number{
return a+b
}
sum(123,456)
// sum('123',456) //这个代码会保错,因为两个参数必须为数字类型number
直接赋值,不声明类型会怎么样呢?如下:
var e = false //TS很聪明,这样直接就是boolean类型的值了
var f = 123//同理,这样变量f就是数字类型number了,其他类型同理
那么函数也这样声明呢? 会怎么样呢? 不妨思考一下
// 如果我们这样写呢,会怎么样呢? 在函数中这样写参数会是任意值
function sum1(a,b){
return a+b
}
// 这样写 我们就可以传入任意类型的两个参数
// 注意:参数不能少传
sum1(123,456)
sum1("11",'22')
字面量类型:一旦声明就不能修改了,这个有点像常量
var a1:10 //字面量类型声明 一旦声明就不能修改了,这个有点像常量
// a1=20 这个代码会报错,字面量类型声明 是不能修改的
联合类型 :连接多个类型 如下
var b1:string | number | boolean
// 这样写的话b1可以有多种类型,可以是字符串类型,数字类型,boolean类型 其他类型则不行
b1 = "1234"
b1 = 1234
b1 = false
// 当然,我们还可以这样写
var b2:"male" | "female" | 123
// 那么b2的值只能是male,female 和123 如下
b2 = "male"
b2 = "female",
b2 = 123
// b2=false //会报错 因为声明的时候没有这个false
any 类型
有没有想过?我们还可以直接声明 如下:
var c1;
//如果我们这样声明的话,则表示是任意类型any(隐式的any),相当于TS对该变量关闭了类型检测
// 注意:使用TS时,不建议使用any类型
c1 = 10
c1 = 'hello'
c1 = false
unknown 类型
var d1 :unknown
d1 = 123
d1 = false
d1 = "123"
// 这样看unknown是不是和any没有区别
// 其实他们是有区别的
// 比如我们声明一个
var f1:string
f1 = c1 //可以赋值给其他变量
// f1 = d1 //不能直接赋值给其他变量
//可以这样解决:
if(typeof d1==="string"){
f1 = d1
}
//我们可以得出结论:
// unknown 实际上是一个类型安全的any,
//unknown 类型的变量,不能直接赋值给其他变量
//我们引出类型断言
//类型断言:可以用来告诉解析器变量的实际类型
/*
语法:
变量 as 类型
<类型>变量
*/
f1 = d1 as string
f1 = <string>d1
void类型 用来表示空 以函数为例,就表示没有返回值的函数
function fn():void{
}
never类型 :表示永远不会返回结果,没有值 如下:
function fn1():never{
throw new Error("报错啦!");
}
对象类型:object
var a:object
a = {}
a = function(){}
//只能赋值对象类型,其他类型的不能赋值,否则会报错
/*
{}用来指定对象中可以包含哪些属性
语法:{属性名:属性值,属性名:属性值}
在属性名后加上?表示属性是可选的
*/
var b :{name:string,age?:number}
b = {name:'C罗'} //因为age? 是可选的所有我们可以不传入,否则必须传入
b = {name:'C罗',age:37}
// b = {} //该代码会报错,因为赋值没有至少要有name
// 上面那样写是不是感觉很鸡肋 ,不妨看看下面这样写:
var c:{name:string,[propName:string]:any}
c = {name:'内马尔',age:37,gender:'男'}
// [propName:string]:any 表示我们可以传任意类型的属性,这样是不是方便多了
函数结构类型
/*
设置函数结构类型声明:
语法:(形参:类型,形参:类型...)=>返回值
*/
// 直接上代码
var d:(a:number,b:number)=>number
d = (n1:number,n2:number):number=>{
return n1+n2
}
数组类型
/*
数组类型声明
类型[]
Array<类型>
这两种方法都可以声明
*/
// string[] 表示字符串数组
var e:string[]
e = ['a','b','c'] //只能包含字符串
// number[] 表示数字类型数组
var f:number[]
f = [1,2,3] //只能包含数字
//还有一种声明的方法
var g:Array<number>
g = [1,2,3]
var h:Array<string>
h = ['1','2','3']
enum枚举
/*
enum枚举
语法:enum 名字(一般大写)
*/
enum Gender{
Male = 0,
Female=1
}
//使用:
var i:{name:string,gender:Gender} //gender 只能取 枚举Gender里面的值
i = {
name:'梅西',
gender:Gender.Male
}
& 和 | 的使用
// & 表示两个都要满足
var j:{name:string} & {age:number}
j = {name:'2022世界杯',age:2022}
// | 满足任意一个即可
var k:{name:string}|{age:number}
k = {name:'科比'}
类型别名:type 表示 可以为 类型取别名
type myType = 1 | 2 | 3 | 'C罗'
var l:myType
var m:myType
var n:myType
m = 'C罗' // 别名里面的值都可以取
n = 1 // 别名里面的值都可以取
先更新到这里,会持续更新的,有不对的地方,希望能够指点