//类型 和 字面量
// 默认不指定类型 自动分配类型
const nub2 = 2
const nub3: 1|2|3 = 1
let literal: 1|'df'|[1,2,3]
let cnu = [1,2,3]
let cn1:Array<number> = [2,1]
let ranVal:any = 33
//unknown 表示不知道的什么类型 要看具体的值才能确定
let ran1:unknown = 44
ran1 = 'df'
ran1 = true
if (typeof ran1 === 'string') {
ran1.toUpperCase()
}
// void 物资不存在(变量本身不存在) undefined 存在本身不存在 有这东西,但没有值(变量没有初始)--都表示没有
// js 没有void
// ts void 都是undefined
function printRes() :void {
console.log('ddd')
}
// never 处理异常,程序永远不能执行完成
function throwError(msg:string,errorCode:number):never {
throw {
msg,errorCode
}
}
throwError('not fond', 404)
function whileLoop():never {
while (true) {
console.log('hahah')
}
}
// 枚举
enum Color {
red = 'red',
green = 39,
blue = 'dd'
}
let c = Color.blue
console.log(c)
function merge(n1:number|string,n2:number|string,resultType:'as-number'|'as-string') {
if (resultType === 'as-string') {
return n1.toString() + n2.toString()
}
if (typeof n1 === 'string' || typeof n2 === 'string') {
return n1.toString() + n2.toString()
} else {
return n1 + n2
}
}
断言 另类方法重载
let duany:any
duany = 'adf'
duany.endsWith('d')
//断言的2种方式 注意断言时类型不能出错,否则可能引发系统错误
let eee = (<string>duany).endsWith('d')
let ee1 = (duany as string).endsWith('d')
//js
let llog = function (msg) {
console.log(msg)
}
// ts 没有重载方法 表示2个参数都可以不传默认值为0,也可以 code?:number (值为undefined)
let llog2 = (msg:string=0,code:number = 0) => {
console.log(msg,code)
}
any 灵活性
// 如果不加any per.nickname 报错,添加any 输出为undefined
const per:any = {
firstName: 'd',
trName: 'b',
age: 22
}
delete per.firstName
// 就可以和js一样添加属性
console.log(per.nickname,per['age'])
接口 和 class
//接口 _ 私有成员变量
interface Ipoint {
// x: number,
// y: number
drawPoint: () => void
getDistances: (p: Ipoint) => number
//添加get set 方法 简写
X: number
Y: number
}
class Point implements Ipoint {
drawPoint(): void {
console.log(this.x,this.y)
}
getDistances(p: Ipoint): number {
return Math.pow(p.x-this.x,2) + Math.pow(p.y-this.y,2);
}
// x: number;
// y: number;
// 私有化变量 只能通过get set 获取
constructor(private x:number, private y:number = 2) {
// this.x = x
// this.y = y
}
// 不能重载
set X(v:number) {
this.x = v
}
get X() {
return this.x
}
set Y(v:number) {
this.y = v
}
get Y() {
return this.y
}
}
const pte = new Point()
pte.X = 100
console.log(pte.X+pte.Y)
泛型
let lastInArray = <T>(arrc: T[]):T => {
return arrc[arrc.length -1]
}
const ll1 = lastInArray([1,2,3])
const ll2 = lastInArray<string|number>(['1','2'])
let nakeTuple = <T, Q=number>(x:T, y:Q):[T,Q] => [x,y]
const vv1 = nakeTuple(1,'dd')
const vv2 = nakeTuple<boolean>(true,1)
模块化 只需要到处就可以了 export
感谢大家的观看,欢迎大家留言评论,不足之处还请大家见谅