没有构造函数的打字稿工厂

问题描述

我最近遇到了以下代码

package main

import (
    "context"
    "fmt"
    "os"
    "time"
    "os/signal"
)

func main() {
    ticker := time.NewTicker(time.Minute)
    done := make(chan bool)
    ctx,stop := signal.NotifyContext(context.Background(),os.Interrupt)
    defer stop()
    go func() {
        for {
            select {
            case <-done:
                return
            case <-ticker.C:
                h,m,_ := time.Now().Clock()
                if m == 0 && (  h == 9 || h == 15 ) {
                    fmt.Printf("Doing the job")
                }
            }
        }
    }()

    <-ctx.Done()
    stop()
    done <- true
}

如何在没有构造函数的情况下实例化 PizzaMaker?

解决方法

在任何支持原生类的环境中(例如 ES6 及更高版本),如果未提供构造函数,则会自动生成:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/constructor

如果您不提供自己的构造函数,则会为您提供默认构造函数。如果您的类是基类,则默认构造函数为空。

对于不支持原生类的环境(例如 ES5 和之前的),TypeScript 会为您生成默认构造函数:

来自the playground

class PizzaMaker {
    create(event: { name: string; toppings: string[] }) {
        return { name: event.name,toppings: event.toppings };
    }
}

发出 JavaScript:

"use strict";
var PizzaMaker = /** @class */ (function () {
    // Note: this empty function is the default constructor
    function PizzaMaker() {
    }
    PizzaMaker.prototype.create = function (event) {
        return { name: event.name,toppings: event.toppings };
    };
    return PizzaMaker;
}());