鸿蒙学习笔记

发布于:2025-02-11 ⋅ 阅读:(57) ⋅ 点赞:(0)

/**
 * 类
 * */

class Persion{
//   字段
  name: string = "";
  age: number = 0;

//   静态字段,使用关键字static将字段声明为静态。静态字段属于类本身,类的所有实例共享一个静态字段。要访问静态字段,需要使用类名。
  static sex:string = "男";

//   构造函数,这里设置几个参数,在创建时就要传几个参数。
  constructor(n: string, a: number) {  //关键字
    this.name = n;
    this.age = a;
  }

  fullInfo() :string {
    return this.name + this.age
  }

}

let p = new Persion('哈哈', 20)
p.fullInfo()  //哈哈20


//访问静态字段
Persion.sex;

//调用静态方法
Persion.sayHello('123');


//继承
// Tearch  继承了 Persion,子类继承父类的所有字段和方法;
class Tearch extends Persion{

}

let t = new Tearch('嘻嘻', 18);  //嘻嘻18

t.fullInfo();
Tearch.sex;



//  可见性修饰符
// 类的方法和属性(字段)都可以使用可见性修饰符
// 可见性修饰符包括: private、protected和public。默认可见性为:public。


// Public(公有)
// public修饰的类成员(字段、方法、构造函数)在程序中任何可访问该类的地方都是可见的。

//Privati(私有)
// private修饰的成员不能在声明该成员的类之外访问

//Protected(受保护)
// protected修饰符的作用与private修饰符非常相似,不同点是protected修饰的成员允许在派生类中访问。

接口

/*
* 接口
* 接口就是定义一个规范,让类或对象按照接口来定义属性
 * */
//  定义接口
interface Info{
  name: string;
  age: number;
  getName(): string;
}

// 类实现接口
class Teacher implements Info{
  name = '';
  age = 0;
  getName() {
    return "";
  }
}

// 对象实现接口类型
interface User{
  name: string;
  age: number;
}

let UserInfo:User = {
  name: '嘻哈',
  age: 50
}

泛型

/**
 * 泛型
 * 在未知类型时可以先用泛型,在调用时再定义返回类型;
 * */

//泛型类
class CustomStack<T> {
  public push(e:T) {

  }
}
// 在使用时定义类型
let c = new CustomStack<string>();
c.push('123');

let c1 = new CustomStack<number>();
c1.push(123);


//泛型函数
function add<I>(x: I) {
  return x;
};

add<string>('15');
add<number>(15);

空安全

/**
 * 空安全
 *
 * 默认情况下,ArkTS中的所有类型都是不可为空的,因此类型的值不能为空。这类似于TypeScript的严格空值检查模式(strictNullChecks), 但规则更严格。
 *
 * */

// let x: number = null;    //编译时就会报错了
let x: number | null = null;
x = 1;    //ok
x = null;    //ok

/**
 * 非空断言运算符
 *后缀运算符!可用于断言其操作数为非空
 * */

class A{
  value: number = 0;
}
function foo(a: A | null) {
  // a.value;   //编译时错误; 无法访问可空值的属性
  a!.value;  //编译通过, 如果运行时a的值非空, 可以访问到a的属性;如果运算

}


/*
 * 空值合并运算符
 * 空值合并二元运算符??用于检查左侧表达式的求值是否等于null或者undefined。如果是,则表达式的结果为右侧表达式;否则,结果为左侧表达式。
 *
 * 换句话说,a ?? b等价于三元运算符(a != null && a != undefined) ? a : b;
 * */

class Person{
  nick: string | null = null
  getNick(): string {
    return this.nick ?? '';
  }
}

模块

/**
 * 模块
 *
 * 程序可划分为多组编译单元或模块
 * 每个模块都有其自己的作用域, 即, 在模块中创建的任何声明(变量、函数、类等)在该模块之外都不可见, 除非它们被显式导出。
 *
 * 与此相对,从另一个模块导出的变量、函数、类、接口等必须首先导入到模块中。
 *
 * */

// 导出
// 可以使用关键字export导出顶层的声明;
// 未导出的声明名称被视为私有名称, 只能在声明该名称的模块中使用。
export function add(x: number) {
  return x * x;
}

export default function hello() {
  return 'hello';
}


// 导入
//在B文件中导入a文件中方法
import {add} from '模块文件路径';
import Hello form '模块文件路径';

ArkUI


网站公告

今日签到

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