[英]constructor function and new object in javascript / typescript
[英]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"))
为什么要在返回 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.