JS学习(五) TypeScript

强类型与弱类型

  • 强类型----------------语言层面限制函数的实参类型必须与形参类型相同
  • 弱类型----------------语言层面不会限制实参的类型

强类型语言不允许任意的隐式数据类型转换,而弱类型则允许

静态类型与动态类型

  • 静态类型------------一个变量声明时它的类型就是明确的,声明过后,它的类型就不允许再修改
  • 动态类型------------在运行阶段才能够明确变量类型,而且变量的类型随时可以改变

TyperScript

原始类型

//严格模式下string number boolean不能为null,非严格模式下则可以

let a:string = 'abc'
let b:number = 100 //NaN Infinity
let c:boolean = true //false
let d:void = null //undefined

Object类型

并不单指普通的对象类型,而是泛指所有的非原始类型,即 Object Array Function

let foo:object = function () {} //[] {}
let obj:{foo:number, bar:string} = {foo:123,bar:'string'} //这个才是单指对象类型

元组类型

一种特殊的数据结构,实际上是一个确定每个元素的类型和元素数量的数组

let tuple: [number, string] = [100, 'zce'] //类型不相符或者超出元素个数都会报错,依旧可以通过元素下标的方式去访问元素

枚举类型

//第一个成员不给指定值的话,会默认从0开始
enum PostStatus {
	Draft = 6, //若后续成员不指定值的话,则会从6开始累加
	Unpublished,
	Published
}
//除了数字枚举,也可以用字符串枚举,但是字符串不能累加,所以每个成员都必须要指定值
enum PostStatus2 {
	Draft = 'aaa', 
	Unpublished = 'bbb',
	Published = 'ccc'
}

//枚举类型会影响运行时的代码,即会影响编译后的结果.枚举会编译为一个双向的键值对对象
//编译后的结果

var PostStatus2;
(function(PostStatus2){
	PostStatus2[PostStatus2['Draft'] = 'aaa'] = 'Draft';
	PostStatus2[PostStatus2['Unpublished '] = 'bbb'] = 'Unpublished ';
	PostStatus2[PostStatus2['Published'] = 'ccc'] = 'Published';
})()
console.log(PostStatus2['aaa']) //Draft

函数类型

//函数声明
//参数b后面接个问号表示为可选参数,即可传可不传,也可使用默认参数.默认参数和可选参数都必须在参数列表的最后
//如果想接收任意数量的参数,可选择rest操作符
function func1 (a:number, b?:number):string {
	return 'func1'
}
//函数表达式
//因为函数表达式是把函数赋值给一个变量,因此变量也要有相应的类型约束
let func2:(a:number, b:number) => string = (a:number, b:number):string{
	return 'func2'
}

隐式类型推断

如果没有通过类型注解去标记一个变量的类型,则会通过这个变量的使用情况去推断一个类型

类型断言

当在确切了解某个值的详细信息时,可以使用类型断言.typescript会假设程序员已经做了必要的检查

//尖括号语法
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;

//as语法
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;

接口

用来约定对象的结构,使用接口的话必须遵循这个接口的约定

interface Post {
	title: string
	content: tring
	subtitle?: string //可选成员
	readonly summary: string //只读成员
}

function printPost (post: Post) {//要求传入的参数必须有title和content两个属性
	console.log(post.title)
	console.log(post.content)
}

//动态成员
interface cache {
	[prop: string]: string
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值