ts知识要点

发布于:2025-03-10 ⋅ 阅读:(23) ⋅ 点赞:(0)
  1. 数字
let  num : number = 12.343
  1. 字符串
let  str : string = '12.343'
  1. 数组
let  arr : string[] =[ '12.343', 'car',  'name']
let arr1 : Array<string> = [ '12.343', 'car',  'name']
let arr2 : [string, number] = ['age', 123] // 一直数组项数,只能有两项
let arr3 Array<number>; // 只声明不赋值
  1. 对象、类及类的实例继承
class obj {
	width: string
	id: number
	flag: boolean
	source: Resource // 仅限方舟语言中使用 资源类型的赋值 source: Resource = $r('xxx/xxx/xxx') 
}

// 类的实例
class opt {
	width: string = '22'
	id: number
    flag?: boolean;
    isHide: boolean
    constructor (w: string, h: number, f?: boolean, hide?: boolean){ // 父类的构造器
        this.width = w;
        this.id = h;
    }
}

// 子类继承父类obj
class Inp extends opt {
	height: number
	constructor(width: string, id:number, height?: number, flag?: boolean, hide? : boolean) {
        super(width, height, flag) // 这块的值跟父类构造器有关,这儿的值是传给父类构造器的, 父类的变量及逻辑可以和子类分开写,所以子类传进来的值可以通过这个入口传给父类,不用在子类中混合写父类的一些逻辑
        this.height = height;
        this.isHide = hide;
        console.log(this.width, this.id, height, flag);
        console.log(this.width, this.id, height, this.flag, hide);
    }
}

new Inp('200', 23, 500, true, false);
  1. 类型断言
let opt:any;
opt = Array<number> opt;
opt = [1,2,3]

let arr: any;
arr = arr as Array;
arr = [111, 222, 444]
  1. 修饰符及ts类的set和get拦截器的使用

// 类的实例
class GetStyle {
    public width: number = 100 // public 共有属性,ts中默认不写,即都是公共的外部可访问
    private _height: number // private 私有属性,而且命名默认都会以“_”开头标注是私有属性, 私有属性只能在类内部调用,外部调用会报错
    constructor () {}
    public setHeight (v?: number): void { 
        this._height = v;
    }
    getHeight () : number {
        return this._height;
    }
    set height(n :number) { // ts的实例默认都有set和get拦截器方法,切函数不能设置返回值类型
        this._height = n;
    }
    get height() {
        return this._height;
    }
}



let st = new GetStyle();
st.setHeight(500);
console.log('类的方法='+st.getHeight()); // 500

st.height = 200 // 这儿就是调用set 拦截器的height方法, 并且赋值是200, 获取get拦截器height方法直接也是直接调用,st.height, 后面不需要追加“()”
console.log('拦截器set\get='+st.height); // 打印是否设置200成功
  1. 多种混合类型,泛型
let  data : object | array | string | null;
data = {name: 1, age: 2}

泛型变量T, 泛型函数定义, 整个函数只处理T类型的,T可以是任意一种类型(number/string...)
function Fn<T> (arg: T) : T => arg
// 调用泛型函数 
Fn<string>('test') // 表示是string类型函数, 变量和返回值都是string类型的

// 泛型接口
interface dataType {
	<T> (arg: T): T
}
// T类规范的接口 
interface dataType1<T> {
	(arg: T) : T
}
function getData<T> (arg: T) : T => arg
let Fn1 : dataType = getData;
Fn1<number>(12.54)
Fn1<string>('test')

  1. 函数
 // ts函数形式 1.命名函数 
function add (x: number = 0) {
    console.log('命名函数:'+(x));
}
add(2);

// ts函数形式 2.匿名函数 --函数变量 经典函数
let add1:(data1: number,  data2: number ) => void 
= function (x: number, y: number) :void {
    console.log('函数变量:'+(x+y));
}
add1(200, 4);

// ts函数形式 3.匿名函数 --箭头函数,es6函数简写
let add2: (m: number, n: number) => void 
= (m: number, n: number): void => {
    console.log(m+n);  
}
  1. 接口
    用于定义数据类型的格式、函数和类的格式规则
interface  data {
	lable: string
	val : number
	id?: string // 非必要的值, 可以没有这个id
	[propName: string]:  any // 不确定的、未知的额外参数
	[index: number]: strimg  // key是索引并且索引是数字类型, 值为string类型
	[readonly index: string]: strimg  // 只读的变量, 和const类似
}
// 接口继承
interface data1 {
	width: string
}
interface Square extends data1 {
	sliderLen: number
}
// Square 此时除了自身属性sliderLen外还有data1的width这个属性的类定义

// 多个接口继承
interface data3 {
	colorType: 
}
interface Square extends data, data1, data3 {
	sliderLen: number
}
// 此时Square身上除了sliderLen还有data、data1、data3他们的属性
  1. 枚举
// 例子1
enum Color {Red = 1, Green = 2, Blue}
let r: Color = Color.Red; // 1 值
let g: Color =Color.Green // 2 值
let gName: string = Color[2] // 属性名 Green
let bName : string = Color[3] // 属性名 Blue

// 例子2
enum student {
    sex,
    age = 13,
    name,
    level
}
let se: student = student.sex // 0 默认从0开始
let ag: student = student.age
let num: number = student.name // 14 ,因为age是13,所以此时name默认从前一个属性age的值的基础上递增
let name1: string = student[13] // age 用[值] 获取属性名
let name2 = student[15] // level 用[值] 获取属性名
console.log(se, ag, num, name1, name2); // 0, 13, 14, age, level

  1. 接口定义规范实例中的一部分数据,包含关系(实例包含接口)
interface IRuner { // 接口的命名习惯都以大写I开头,加强识别是接口定义
    sex: string
    age: number
}
interface IWhere { // 接口的命名习惯都以大写I开头,加强识别是接口定义
    where: string
}
// 类的实例
class Person implements IRuner, IWhere { // 接口规范实例中的一部分数据,实例中的属性必须包含接口属性,这样才能满足该实例可以被接口校验
    sex: string // 这个是IRuner的接口属性定义比不可少
    age: number // 这个是IRuner的接口属性定义比不可少
    where: string // 必不可少
    name: string // 可以额外增加name属性
    getInfo:(name: string, sex: string, age: number) => void = (name: string, sex: string, age: number):void => { // 新增getInfo方法
        this.name = name;
        this.age = age;
        this.sex = sex;
        console.log(`${this.name}是我的${this.sex}朋友,今年${this.age}岁`);
        
    }
}

// let p = new Person();
let p: Person = new Person();

p.getInfo('Lucy', '女', 18)
  1. 命名空间 namespace
    独立封闭的域,域内方法变量都是私有的,包括命名空间本身,想要外部使用都得使用export导出
// 命名空间 namespace
export namespace dealUser {
    export function changeUseName (x: string ):void {
        console.log("this===", this, x);
         
    }
    export function getName (x: string ):void {
        console.log("this===", this.UserInfo, this.changeUseName, x); // this.UserInfo == undefined 说明不会进行预解释,按照js的顺序执行
    }
    export class Userinfo {
        name: string
        type: number
        id: number
    }
}

dealUser.changeUseName('Luce')
dealUser.getName('sunday')
dealUser.Userinfo

网站公告

今日签到

点亮在社区的每一天
去签到