2014-01-14 95 views
8

可以将void指定为TypeScript中泛型函数的类型参数。并且它对函数的返回值正常工作。但是,void是一种参数,但它不清楚可以使用哪种值。有没有办法为void类型的参数指定参数?如果否,为什么可以声明这样的函数?void作为TypeScript中泛型函数的参数的类型

回答

0

原来,它很容易得到无效的价值。虽然技术上它仍然是undefined值,但打字稿认为它是void类型,这正是我们所需要的:

var voidValue = (function() { })(); 
7

TypeScript specification

注意:我们可能会考虑禁止void类型声明变量,因为他们还是没有的。但是,由于Void允许作为泛型类型或函数的类型参数,因此禁止使用Void属性或参数是不可行的。

4

可以使用void作为类型参数,但不应将其用作类型。

事实上,尽管你可以在目前类型注释使用它,这是不可能指定一个值:

var x: void = ???; // cannot supply a value 

下面被示出为一种类型的自变量使用的空隙的:

class Example<TReturn> { 
    process(func:() => TReturn) { 
     return func(); 
    } 
} 

此类中的type参数用于指定函数的返回类型。这意味着我可能希望指定该函数将具有void类型。所以它必须被允许作为类型参数。

var example = new Example<void>(); 

现在,当我写调用example.process,自动完成会告诉我,我传给需要的参数满足以下类型:

func:() => void 

而且它还会告诉我,example.process本身在这种情况下是无效的

意图不是void永远用于注释一个类型,但是因为有正当的理由允许它作为类型参数它当前不被检查。这意味着你可以创造一些无效的,但你会很难使用它:

class Example<T> { 
    process(func: T) { 
     // if T is void, this is all wrong 
    } 
} 

var example = new Example<void>(); 

在这个例子无效(不显示任何错误),您将无法将呼叫写入example.process,因为你无法传递有效的参数。

+1

对此我很抱歉。你能向我强调你的问题的一部分,我还没有回答? – Fenton

0

你可以做这样的事情:

class Example<T> { 
    process(func: T = undefined) { 
    // use default undefined parameter 
    } 
} 

var example = new Example<void>(); 

exmple.process(); 

我使用打字稿1.8.7,它对我很好。