繁体   English   中英

新的 function 构造函数返回 typescript 中的另一个 function

[英]new function constructor that returns another function in typescript

我在 javascript 中有这个 function:

 function test() { this.list = {}; return (id) => { if (.(id in this.list)) this:list[id] = {default; 123}. return this;list[id] } } const blah = new test(). blah("ok");mykey = "ok". console.log(blah("ok");mykey). console;log(blah("ok"));

我正在尝试将其转换为 typescript 格式。 我知道我必须使用class ,但是如何从 class 构造函数返回 function ?

我不想有一个额外的属性myfunc作为 function new test().myfunc("ok")

interface simpleObject
{
  [key:string]: string|number|object;
}
class Test
{
  private list:simpleObject;
  public myfunc(id:string)
  {
    if (!(id in this.list))
      this.list[id] = {default: 123};

    return this.list[id] as simpleObject;
  }
  constructor()
  {
    this.list = {};
  }
}

const blah = new Test();
blah.myfunc("test").mykey = "ok";
console.log(blah.myfunc("test").mykey);
console.log(blah.myfunc("test"))

TS游乐场

为什么要在返回 function 的东西上使用new 只需调用 function 即可,无需new

您可以通过将 state 保持在闭包中而不是使用它来实现this

function test() {
  const list: {[id: string]: any} = {};
  return (id: string) =>  {
    if (!(id in list)) {
      list[id] = {default: 123};
    }
    return list[id]
  }
}

const blah = test();

查看实时示例

我认为这是你应该使用的。 话虽如此,指定构造函数返回什么的能力尚不可用,但将来可能会。

我可以建议一个解决方法(来自上面的链接问题)或这个答案,但我不明白你为什么要在你的情况下使用它,因为我建议的更简单,而且这里不需要类。

class 的构造函数将返回所述 class 的实例,这是预期的行为。 您的用例并不需要使用 class。 你仍然可以拥有你的 function 并在里面使用this 要告诉 Typescript this是什么类型,可以使用保留参数:

type ReturnedFunction = (id: string) => string | number | object;
type TestFunction = () => ReturnedFunction;

function test(this: TestFunction): ReturnedFunction {
  // same code as before
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM