接口

接口是 TypeScript 中定义复杂类型的一种方式,它可以描述一个对象的结构。关键字 interface

interface Car {
  color: string
}
let car: Car = { color: "红色" };
console.log("jarlen","car:"+car.color);

TypeScript支持基于类的面向对象的编程方式,定义类的关键字为class,后面紧跟类名。类描述了所创建的对象共同的属性和方法。关键是class

class Person {
  private _name: string = "";
  public set name(value: string) {
    this._name = value;
  }
  public get name(): string {
    return this._name;
  }
  private _age: number = 12;
  public set age(value: number) {
    this._age = value;
  }
  public get age(): number {
    return this._age;
  }
}

let person:Person = new Person();
person.name="Jarlen"
person.age=6
console.log("jarlen", "car:" + person.name+","+person.age);

继承

继承就是子类继承父类的特征和行为,使得子类具有父类相同的行为。TypeScript中允许使用继承来扩展现有的类,对应的关键字为extends

class Person {
  private _name: string = "";

  constructor(name: string) {
    this._name = name;
  }

  public set name(value: string) {
    this._name = value;
  }

  public get name(): string {
    return this._name;
  }
}

class Boy extends Person {
  private _sex: string = '男孩';

  constructor(name: string) {
    super(name);
  }

  public set sex(value: string) {
    this._sex = value;
  }

  public get sex(): string {
    return this._sex;
  }
}

let person: Person = new Boy("Jarlen");
console.log("jarlen", "person:" + person.name);

模块

随着应用越来越大,通常要将代码拆分成多个文件,即所谓的模块(module)。模块可以相互加载,并可以使用特殊的指令 export 和 import 来交换功能,从另一个模块调用一个模块的函数。
两个模块之间的关系是通过在文件级别上使用 import 和 export 建立的。模块里面的变量、函数和类等在模块外部是不可见的,除非明确地使用 export 导出它们。类似地,我们必须通过 import 导入其他模块导出的变量、函数、类等。

export class Person{
  private _name: string

  public set name(value: string) {
    this._name = value
  }

  public get name(): string {
    return this._name
  }

  private _age: number

  public set age(value: number) {
    this._age = value
  }

  public get age(): number {
    return this._age
  }

  constructor(name: string, age: number) {
    this._name = name
    this._age = age
  }
}

import { Person } from './Person';

export class Boy extends Person {
  private _sex: string = '男';

  public set sex(value: string) {
    this._sex = value;
  }

  public get sex(): string {
    return this._sex;
  }

  constructor(name: string, age: number) {
    super(name, age);
  }
}

import { Boy } from '../bean/Boy';
import { Person } from '../bean/Person';

let person:Person = new Boy("Jarlen",12);

泛型

泛型允许在定义函数、接口或类时使用类型参数。

function identity<T>(arg: T): T {
    return arg;
}
 
let output = identity<string>("Hello, jarlen!");
console.log(output);