TypeScript中的约束与类型断言(2)

2019-06-15  本文已影响0人  wayne1125

一、TypeScript中的联合类型

// 联合类型
var muchType:string|number = '1'
muchType = 1
// console.log(muchType.length) // 报错
console.log(muchType.toString()) // 共有方法

二、TypeScript中的对象类型——接口

// 对象属性 
// 强约束对象的属性值和属性个数
interface IState {
  name: string
}
var obj:IState;
obj = {name: 'wayne'}

// 可限定属性是否唯一
interface IState2 {
  name: string,
  age?: number // 可有可无
}
var obj2:IState2;
obj2 = {name: 'wayne',age: 21}
obj2 = {name: 'wayne'}

// 可限定属性是否唯一
interface IState3 {
  name: string,
  age?: number, // 可有可无
  [propName:string]:any
}
var obj3:IState3;
obj3 = {name: 'wayne',age: 21}
obj3 = {name: 'wayne',a:1,b:2,c:3}

// 只读属性 初始值后不可再赋值
interface IState4 {
  name: string,
  readonly age: number // 年龄一旦输入便不可更改
}
var obj4:IState4 = {name: 'wayne',age: 18}
obj4.name = 'zhangsan';
// obj4.age = 16 // 不可修改

三、TypeScript中的数组类型

// 类型+方括号
var arr:number [] = [1,2,3]
var str2:string [] = ['1','2','3']
var obj5:any [] = [1,'2',3]
  // 数组泛型 Array<元素类型>
var arrType:Array<number> = [1,2,3]
var arrType2:Array<string> = ['1','2','3']
var arrType3:Array<any> = [1,'2','3']
// 接口表示法
interface IState5 {
  name: string,
  age?: number // 可有可无
}
interface IArr{
  [index:number]:IState5
}
var interArr:IArr = [{name: 'wayne',age: 1}]
var arrType5:Array<IState5> = [{name: 'wayne',age: 1}]
var arrType6:IState5 [] = [{name: 'wayne',age: 1}]

四、TypeScript中的函数类型

// 声明类型的函数
function funcType(name:string,age:number):number{
  return age
}
var ageNum:number = funcType('wayne',26)
function funcType2(name:string,age:number,sex?:string):number{
  return age
}
funcType2('wayne',26,'男')
function funcType3(name:string='wayne',age:number=26):number{
  return age
}
// 表达式类型的函数
var funcVar = function(name:string,age:number=26):number{
  return age
}
var funcType4:(name:string,age:number)=>number=function(name:string,age:number):number{
  return age
}
interface funcType5{
  (name:string,age:number):number
}
var funcType6:funcType5 = function(name:string,age:number):number{
  return age
}

var getValue = function(value:number|string):number|string{
  return value
}
getValue(1)
getValue('1')
// 输入number 输出number,输入string 输出string
function getValue2(value:number):number;
function getValue2(value:string):string;
function getValue2 (value:number|string):number|string{
  return value
}
// 重载
var gNum:number = getValue2(1);
var gStr:string = getValue2('1');

五、TypeScript中的类型断言

// 类型断言
function getAssert(name:string|number){
  // return (<string>name).length
  return (name as string).length
}
// jsx中只能使用as语法
上一篇 下一篇

猜你喜欢

热点阅读