Typescript 实施懒惰<;T>;打字稿?

Typescript 实施懒惰<;T>;打字稿?,typescript,Typescript,在.NET中,有一种类型,例如对于实现延迟加载和缓存非常有用。我不知道TypeScript有一个等价的解决方案,所以我推出了自己的解决方案 export interface Factory<TResult> { () : TResult; } export class Lazy<T> { factoryOutput : T; isValueSet : boolean; constructor(private factory : Factory&

在.NET中,有一种类型,例如对于实现延迟加载和缓存非常有用。我不知道TypeScript有一个等价的解决方案,所以我推出了自己的解决方案

export interface Factory<TResult> { () : TResult; }

export class Lazy<T> {
    factoryOutput : T;
    isValueSet : boolean;

    constructor(private factory : Factory<T>) { }    

    get value() {
        if (!this.isValueSet) {
            this.factoryOutput = this.factory();
            this.isValueSet = true;
        }
        return this.factoryOutput;
    }
}
导出接口工厂{():TResult;}
导出类惰性{
工厂产量:T;
isValueSet:布尔型;
构造函数(私有工厂:工厂){}
获取值(){
如果(!this.isValueSet){
this.factoryOutput=this.factory();
this.isValueSet=true;
}
返回此.factoryOutput;
}
}
我不得不自己实施它,这让我想:

  • 我是否忽略了现有的TypeScript解决方案
  • 我想在TypeScript中使用.NET样式的
    Lazy
    ,这有什么根本性的错误吗

typescript中没有类似的语言,因为该语言不提供任何帮助程序/UTIL。但是javascript有一点像你所描述的。我发现,由于函数是一等公民,通过lambda通常是合适的:例如:
log(()=>HeavyFunctThatwillonlyExecutedforPropertLogLevel())
。对于更复杂的东西,
immutable.js
为响应提供了惰性SeqsThanks,伙计们!Nitzan,
Promise
确实作为一种可能的替代方案在我脑海中运行,但问题是我希望同步访问延迟加载的值,并将其缓存以供后续访问。出于同样的原因,布鲁诺,仅仅通过一个lambda也不完全符合要求。我认为,
Promise
可能是我最好的选择,因为对重功能的同步评估最终会降低性能,但这也可能会影响架构设计。我可能会在这里回答我自己的问题,但让我们看看还有什么问题!那么就坚持你的解决方案吧,没有什么不对的,在typescript中没有类似的东西,因为该语言不提供任何helper/util。但是javascript有一点像你所描述的。我发现,由于函数是一等公民,通过lambda通常是合适的:例如:
log(()=>HeavyFunctThatwillonlyExecutedforPropertLogLevel())
。对于更复杂的东西,
immutable.js
为响应提供了惰性SeqsThanks,伙计们!Nitzan,
Promise
确实作为一种可能的替代方案在我脑海中运行,但问题是我希望同步访问延迟加载的值,并将其缓存以供后续访问。出于同样的原因,布鲁诺,仅仅通过一个lambda也不完全符合要求。我认为,
Promise
可能是我最好的选择,因为对重功能的同步评估最终会降低性能,但这也可能会影响架构设计。我可能会在这里回答我自己的问题,但让我们看看还有什么问题!那就坚持你的解决方案吧,没什么不对的