typeScript 之(3) 类型

 1.初次尝试

/* 注意: 声明一个变量,同时指定它的类型为number */
let a : number
a=10
a=35
/* 
a = 'hello'  
此行代码会报错,因为变量a的类型是number 不能赋值字符窜 
注:即使报错, 但是还是编译通过,但是编译后控制台会提示错误内容
*/

2.简写写法,ts可以自动对变量进行类型检测

/* 一般写法 */
/* let c:boolean = true */
/* 简写 */
let c= true

3.能在定义函数时,参数的类型可以避免很多不必要的数据类型转换问题

function sum(a:number,b:number):number {
  return a + b
}
let result = sum(123,345)
console.log(result)

4.ts的类型对照表

新增类型分析

 (1) 字面量  (可以使用 |  来连接多个类型(联合类型))

let a:10
/* a=11  报错*/
let b: "male" | "female" (可以用于性别)
b="male"
b="female"
/* b="hello" 报错 */
let c:boolean | string;
c = true;
c= 'hello'

扩展:

// & 表示同步
let j:{name:string} & {age:number}
j = {name:'孙悟空',age:18}

(2) any 任意类型 相当于对这个变量关闭了TS的检测类型 (不推荐使用)

let d:any   //显示的
d = 10;
d = 'hello'

let e //隐式的
e = 10
e= "hello"

(3)  unknow  表示未知类型的值   实际就是一个类型安全的 any  推荐

let d:any = 10

let s:string;
s = d //不报错,d是any,可以给任何变量,顺带改变了s的检测类型

let a:unknown
a = 'hello'
//unknown 实际上就是一个类型安全的any
//unknown 类型的变量 ,不能直接赋值给其他变量
if(typeof a ==='string')
{
  s = a
}
s  = a as string ;//类型断言
s = <string> a; //也可以用
/* s= a 这判断外写是会报错的*/

(4)  void  用来表示空  以函数为例,就表示没有返回值的函数

function fn():void {
  
}

(5) never 表示永远不会返回结果,用来报错 (仅了解)

function fn():void {
  throw new Error('报错了!')
}

(5) object 

//{} 用来表示对象中包含哪些属性
//语法:{属性名:属性值,属性名:属性值}
//在属性名后边加上 ? ,表示属性是可选的
let b: {name:string,age?:number};
b = {name:'孙悟空',age:18}

//[propName:string]:any 表示任意类型的属性
let c: {name:string,[propName:string]:any};
c = {name:'猪八戒',age:18,gender:''}

/* 
  设置函数结构的类型声明
    语法:(参数:类型,参数:类型...) => 返回值
*/
let d:(a:number,b:number) => number;
d = function(n1:number,n2:number):number{
  return n1+n2
}

(6) array

//number[] 表示数值数组
let a:number[];

//let b: Array<any>
let b:Array<number>;
b = [1,2,3]

(7) tuple  元组  固定长度的数组

//元组 元组就是固定长度的数组
let h:[string,string];
h = ['hello','HM']

(8)enum  枚举

enum Gender {
  Male = 0,
  Female = 1
}

let a:{name:string,gender:Gender};
a = {
  name:'孙悟空',
  gender:Gender.Male
}
原文地址:https://www.cnblogs.com/zmztya/p/14717140.html