类型注解是TS中一种轻量的为函数或变量添加约束的方式
和JS一样使用一对双引号或单引号包裹,也可以使用模板字符串
ts// 字符串类型约束
let str:string = "a"
str='b'
console.log(str,typeof(str))
ts// 字符串类型约束
let age:number = 18
let str:string = `小明今年${age}`
console.log(str,typeof(str))
和JS一样,TS中的数字类型也是全部由浮点数表示,且TS支持十进制字面量dec、十六进制字面量hex、二进制字面量bin和八进制字面量oct
ts // 数字类型约束
let del: number = 13 //十进制字面量
console.log(del, typeof (del))
let hex:number = 0xD //十六进制字面量
console.log(hex, typeof (hex))
let bin:number = 0b1101 //二进制字面量
console.log(bin, typeof (bin))
let oct:number = 0o15 //八进制字面量
console.log(oct, typeof (oct))
采用以下方式声明变量类型
jslet 变量名:boolean = true
ts let a: boolean = true
console.log(a, typeof (a))//true 'boolean'
ts let a = true
console.log(a, typeof (a))
a="s"
默认情况下,null和undefined是所有类型的子类型,即可以将null和undefined赋值给number类型等
let a1:undefined=undefined let a2:null=null console.log(a1,a2)
在TS中启用严格的空校验(--strictNullChecks)特性,就可以使得null和undefined只能被赋值给void或本身对应的类型
默认启用,需要将注释去掉,然后设为false表示不启用
将TS中严格的空校验(--strictNullChecks)设为关闭,就可以将null和undefined赋值给其它类型,如数字类型。赋值后的类型会变成null或undefined
ES6引入的新数据类型,表示独一无二的值
symbol值由Symbol函数生成
ts let sym:symbol = Symbol()
Symbol函数可以接受一个字符串、对象或数值(TS中不能是对象,若为对象则报错)作为参数,表示对Symbol实例的描述
主要是为了在控制台显示,或者转为字符串时,比较容易区分
ts let sym:symbol = Symbol("1")
若该参数是一个对象,则会调用该对象的toString方法,将其转为一个字符串然后生成一个Symbol值
JS中才支持传入对象,TS中不支持
jsconst obj = {
toString() {
return 'abc';
}
};
const sym = Symbol(obj);
// 在ts 不允许的传入对象,js中可以
sym // Symbol(abc)
Symbol函数的参数只是表示对当前Symbol值的描述,因此相同参数的Symbol函数的返回值是不相等的
对象的属性名有两种类型:
使用es6语法需要加入ES6,使用DOM则需要引入DOM
ts "lib": ["ES6","DOM"],
tslet sym:symbol = Symbol("1")
console.log(sym.description) // 1
tsconst namesSub = Symbol.for("namesSub")
console.log(Symbol.keyFor(namesSub)) // 返回标识符"namesSub"
都无法获取symbol属性
tsconst names:symbol = Symbol("name")
const info = {
[names]:"小名",
age:12,
hobby:"hack"
}
//普通方法无法取到symbol作为的属性名
for (const key in info){
console.log(key)//age hobby
}
console.log(Object.keys(info)) // ['age', 'hobby']
console.log(Object.getOwnPropertyNames(info)) // ['age', 'hobby']
console.log(JSON.stringify(info)) // {"age":12,"hobby":"hack"}
tsconsole.log(Reflect.ownKeys(info)) //['age', 'hobby', Symbol(name)]
tsconsole.log(Object.getOwnPropertySymbols(info)) //[Symbol(name)]
tsconsole.log(Symbol.for("name")) //Symbol(name)
BigInt可以表示任意大的整数
ts<p style="color:red;">直接在数字字面量后面加n在ts中会报错</p>
ts let bin:BigInt = BigInt("90071992547409910")
对任何BigInt值使用JSON.stringify()都会引发TypeError,默认情况下BigInt值不会在JSON中序列化
本文作者:RKLS
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!