- 数字
let num : number = 12.343
- 字符串
let str : string = '12.343'
- 数组
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>; // 只声明不赋值
- 对象、类及类的实例继承
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);
- 类型断言
let opt:any;
opt = Array<number> opt;
opt = [1,2,3]
let arr: any;
arr = arr as Array;
arr = [111, 222, 444]
- 修饰符及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成功
- 多种混合类型,泛型
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')
- 函数
// 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);
}
- 接口
用于定义数据类型的格式、函数和类的格式规则
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
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
- 接口定义规范实例中的一部分数据,包含关系(实例包含接口)
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)
- 命名空间 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