3

是否可以编写一个遵循此(有效)打字稿接口的 javascript 函数:

interface Foo{
    // constructor: 
    new (): string; 
}

即当使用新运算符调用时返回一个字符串的东西。例如以下将不起作用。

function foo(){
    return "something";
} 
var x = new foo(); 
// x is now foo (and not string) whether you like it or not :) 
4

2 回答 2

5

你应该能够做到:

function foo(){
    return new String("something");
} 
var x = new foo(); 

console.log(x);

您可以返回任何对象,但文字不起作用。请参阅此处:构造函数可以返回哪些值以避免返回 this?

于 2013-07-22T13:01:17.700 回答
2

ECMAScript 5 的第 13.2.2 节(关于[[Construct]]内部属性)对构造函数的返回值有这样的说法:

1) Letobj是一个新创建的原生 ECMAScript 对象。

...

8) 让result是调用 的[[Call]]内部属性F,提供obj作为值并提供作为 argsthis传入的参数列表的结果。[[Construct]]

9)如果Type(result)Object则返回result

10) 返回obj

因此,构造函数的返回值只能是一个对象。字符串原语 like"foo"Type结果是String而不是Object。这意味着第 9 步为假,所以第 10 步返回构造的对象,而不是构造函数的返回值。

相反,您必须返回一个对象 ( new String("foo")),如 RobH 的回答中所述。

于 2013-07-22T13:16:10.520 回答