是否可以编写一个遵循此(有效)打字稿界面的javascript函数:
interface Foo{
// constructor:
new (): string;
}
即。使用new运算符调用时返回字符串的内容。例如以下方法无效。
function foo(){
return "something";
}
var x = new foo();
// x is now foo (and not string) whether you like it or not :)
答案 0 :(得分:5)
你应该可以这样做:
function foo(){
return new String("something");
}
var x = new foo();
console.log(x);
您可以返回任何对象,但文字不起作用。见这里:What values can a constructor return to avoid returning this?
答案 1 :(得分:2)
ECMAScript 5的Section 13.2.2(在[[Construct]]
内部属性上)可以说明构造函数的返回值:
1)让
obj
成为新创建的本机ECMAScript对象。...
8)让
result
成为调用[[Call]]
的{{1}}内部属性,提供F
作为obj
值并提供参数列表的结果作为args传递给this
。9)如果
[[Construct]]
为Type(result)
,则返回Object
。10)返回
result
。
因此,构造函数的返回值只能是一个对象。像obj
这样的字符串原语的"foo"
结果为Type
而不是String
。这意味着步骤9为false,因此步骤10返回构造对象,而不是构造函数的返回值。
相反,您必须返回一个对象(Object
),详见RobH的回答。