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