/** * 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", ], }