typescript: model

发布时间 2023-10-05 07:47:58作者: ®Geovin Du Dream Park™

 

/**
 * TypeScript 实体类 Model geovindu,Geovin Du
 * https://stackoverflow.com/questions/12827266/get-and-set-in-typescript
 * https://github.com/Microsoft/TypeScript/wiki/Coding-guidelines
 */
class UserInfo {
    id!: number;
    userName!: string;
    email!: string;
  }

  class Car { //export

    id!: number;
    seats!: number;
    engine!: string;

   /* constructor(id, seats,engine){
        this.id = id;
        this.seats = seats;
        this.engine=engine;
    }*/

    public  getId(): number { //get
        return this.id;
    }

    public  getSeats(): number { //get
        return this.seats;
    }

    public  getEngine(): string { //get
        return this.engine;
    }

    public setSeats(seats: number) //set
    {
        this.seats=seats;
    }

    public setEngine(engine: string) //set
    {
        this.engine=engine;
    }

}
  
/**
 * 继承
 */
class Motorcycle extends Car
{
   /*  id!: number;
    seats!: number;
    engine!: string;

   constructor(id, seats,engine){
        this.id = id;
        this.seats = seats;
        this.engine=engine;
    }

    public  getId(): number { //get
        return this.id;
    }

    public  getSeats(): number { //get
        return this.seats;
    }

    public  getEngine(): string { //get
        return this.engine;
    }

    public setSeats(seats: number) //set
    {
        this.seats=seats;
    }

    public setEngine(engine: string) //set
    {
        this.engine=engine;
    }*/

}
/*
  interface DuBuilder<Car>()
    .id(1)
    .setSeats("")
    .setEngine("")
    .build();
*/


interface Builder {
    setSeats(seats: number): this;
    setEngine(engine: string): this;

  }
  


export class CarBuilder implements Builder {
    private car: Car;
  
    constructor() {
      this.car = new Car();
    }
  
    public setSeats(seats: number): this {
      //this.car.setSeats(seats);
    
      this.car.setSeats(seats);
      return this;
    }
  
    public setEngine(engine: string): this {
      this.car.setEngine(engine);
      return this;
    }
  
    public getResult(): Car {
      return this.car;
    }
  }
  
  class DuDirector {

    public buildFerrari(): Car {
      return new CarBuilder().setSeats(2).setEngine("V-12").getResult();
    }
  
    public buildToyota(): Car {
      return new CarBuilder().setSeats(7).setEngine("V-6").getResult();
    }
  
    public buildHonda(): Motorcycle {
      return new MotorcycleBuilder().setSeats(2).setEngine("V-4").getResult();
    }
  
    public buildYamaha(): Motorcycle {
      return new MotorcycleBuilder().setSeats(1).setEngine("V-2").getResult();
    }
  }

/* */
class MotorcycleBuilder implements Builder {

    private motorcycle: Motorcycle;
  
    constructor() {
      this.motorcycle = new Motorcycle();
    }
  
    public setSeats(seats: number): this {
      this.motorcycle.setSeats(seats);
      return this;
    }
  
    public setEngine(engine: string): this {
      this.motorcycle.setEngine(engine);
      return this;
    }
  
    public getResult(): Motorcycle {
      return this.motorcycle;
    }
  }
 
/**/
const directorBu = new DuDirector();
directorBu.buildFerrari();
directorBu.buildToyota();

directorBu.buildHonda();
directorBu.buildYamaha();

const car = new CarBuilder().setSeats(2).setEngine("V-12").getResult();

const motorcycle = new MotorcycleBuilder()
  .setSeats(2)
  .setEngine("V-4")
  .getResult();

  

tsconfig.json

{
    "compilerOptions": {
   
      "target": "ES5",
      "module": "CommonJS",
      "outDir": "./dist",
      "rootDir": "./src",
      "resolveJsonModule": true,
      "composite": true,  // required on the dependency project for references to work https://github.com/microsoft/TypeScript/issues/30693
      "sourceMap": true,
      "strictPropertyInitialization": false
      /*"emitDecoratorMetadata": false,
      "experimentalDecorators": true,
      "removeComments": false,
      "strict": true,
      "strictNullChecks": true,*/
      //"declaration": false
      /*
      "strict": true,
      "experimentalDecorators": true,
      "useDefineForClassFields": false,
      "skipLibCheck": true, 
      "forceConsistentCasingInFileNames": true,
      "esModuleInterop": true,
      "moduleResolution": "node",
        // Tells TypeScript to read JS files, as normally they are ignored as source files
        "allowJs": true,
        // Generate d.ts files
        "declaration": true,
        // go to js file when using IDE functions like "Go to Definition" in VSCode
        "declarationMap": true,
         // This compiler run should only output d.ts files
        "emitDeclarationOnly": true
        "lib": [
          "es2017",
          "es2018"
        ]*/

    },
    "includes": [
    "src/**/*.ts",
    "other-src/**/*.ts"
    ],
    "exclude":[
      "rollup.config.js",
      "test",
      "dist",
      "node_modules",
    ],
  }