微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决没有构造函数的打字稿工厂

我最近遇到了以下代码

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;
}());

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。