1.JS/TS中有哪些数据类型
JS中的数据类型其实是值的类型,如:
var age = 15、var name = '张三'、var a = true
TS中的数据类型是指变量的类型:
type number = 1|1.1|2|30...、type string = a|b|ab|c|sadda...、type boolean = true|false('|'为并)
type Object = {?} | Array | Function | String | Number | Boolean | RegExp(正则表达式) | ...
关于大小写的number/string/boolean:
js的历史遗留问题
var n = 42、 var m = new Number(42)
当使用42.toFixed(2)时:
JS中的Number、String、Boolean只用于包装对象,正常开发者不用它们,在TS里也不用。
2.如何在TS里描述对象的数据类型:
1.用class/constructor描述
2.用type或interface描述
用类型签名和Record描述对象:
由于object太不精确,所以TS开发者一般使用类型签名或Record泛型来描述普通对象
注:索引签名的类型必须是string、number、symbol或者模板自变量类型。
3.如何在TS里描述数组对象:
用[ ]和Array泛型来描述数组:
由于Array太不精确,所以TS开发者一般用Array<?>或string[ ]或[string,number](二元组)等写法来描述数组。
注:若type A = [1,2,3], 则const a:A = [1,2,3], 否则报错。
4.如何在TS里描述函数对象:
type FnA = (a:number, b:number) => number // 有两个number类型的参数,返回值为number的函数
const a:FnA = (x, y) => { return 123}
//const a:FnA = (x) => {return 123} (参数可以少传或不传)
a(1,2) //调用的时候必须传完整的参数
type FnReturnVoid = () => void //返回值为void
type FnReturnUndefined = () => undefined //返回值为undefined
const f1: FnReturnVoid = () => { console.log(hi) }
const f2: FnReturnUndefined = () => { console.log(hi) return undefined }
可以调用this的函数写法:
type Person = {name:'aa',age:12,sayHi:FnWithThis} // 定义Person
type FnWithThis = (this:Person , name:string) => void // 定义FnWithThis函数
const sayHi : FnWithThis = function() { console.log('hi' + this.name) } // 声明sayHi函数
const x:Person = {name:'asdsad',age:22, sayHi:sayHi} // 声明x对象
x.sayHi('Jack') / sayHi.call(x,'Jack') // 两种调用方式