javascript – TypeScript闭包 – 一种“差不多”的解决方案

发布时间:2020-09-16 发布网站:编程之家
编程之家收集整理的这篇文章主要介绍了javascript – TypeScript闭包 – 一种“差不多”的解决方案编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我最大的一个关于TypeScript的问题是,它将原型的所有方法(无论访问修饰符)编译.

class Example {
    public getString(): string {
        return "Hello World";
    }

    private getNumber(): number {
        return 123;
    }
}

众所周知,访问修饰符仅在编译时检查,因此被发出的JavaScript忽略. JavaScript开发人员学会减轻这种情况的一种方法是使用闭包(好吧,我们知道使用闭包会有性能损失,但我相信有些情况下绝对需要关闭).

var Example = (function () {
    function Example() {
        this.getString = function () {
            return "Hello World";
        }

        var getNumber = function() {
            return 123;
        }
    }

    return Example;
})();

以上示例尊重公共/私人访问.

我已经解决了使用lambda语法我们可以在TypeScript中声明公共闭包方法.

class Example {
    getString = (): string => {
        return "Hello World";
    }
}

它不是特别漂亮,但它有效.

我想知道的是:我如何在TypeScript中声明私有闭包?

class Example {

    // TypeScript doesn't like this!
    var getNumber = (): number => {
        return 123;
    }
}

在这里查看有关此bugbear的更多信息:https://github.com/Microsoft/TypeScript/issues/2940

解决方法

TypeScript为ES6带来了类型和访问器(它会静态检查). TypeScript中的class关键字是ES6中的标准类关键字. ES6课程中没有私人关闭.此语法在ES6中无效:

class Example {
    var v = /* ... */; // invalid in ES6
}

如果需要声明封装变量的闭包,则应使用经典的JavaScript方法.我强烈建议利用TS接口:

interface NamedObject {
    getName(): string;
}

let createNamedObject = function (name = 'John'): NamedObject {
    return {
        getName: function () {
            return name;
        }
    };
};

let obj: NamedObject = createNamedObject();

如果你真的想用闭包创建类方法,你可以这样做:

class BadPerformance {
    public getName: () => string;

    constructor(name = 'John') {
        this.getName = () => {
            return name;
        };
    }
}

总结

以上是编程之家为你收集整理的javascript – TypeScript闭包 – 一种“差不多”的解决方案全部内容,希望文章能够帮你解决javascript – TypeScript闭包 – 一种“差不多”的解决方案所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478
编程之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ”
精选程序员所需精品干货内容!