实例化的多态函数作为TypeScript中的参数

d8d*_*f42 4 typescript

在下面的最后一行中,我想实例化一个多态函数并将其作为参数传递.

function id<T> (x:T) { return x; }
console.log ( id<number>(0) )
console.log ( id< (x:number)=>number > (id) (0) )
console.log ( id< (x:number)=>number > (id<number> ) (0) )
Run Code Online (Sandbox Code Playgroud)

我正进入(状态 error TS1005: '(' expected.

所以我似乎只有在调用函数时才能实例化类型参数.真?

离开实例化(倒数第二行)就行了.

作为参考,这适用于C#(注意:) id<int>:

using System;
class P {
    static T id<T> (T x) { return x; }
    public static void Main (string [] argv) {
        Console.WriteLine (id<Func<int,int>> (id<int>) (0));
    }
}
Run Code Online (Sandbox Code Playgroud)

好吧,我想这在TypeScript中是不可能的.标准 https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#4-expressions说"TypeScript使用以下结构扩充JavaScript表达式:...在函数调用中键入参数......"这显然意味着"仅在函数调用中键入参数".

bas*_*rat 7

清理代码示例以明确目的.您需要以下内容:

function id<T>(x: T) { return x; }
(id<(x: number) => number>(id<number>))(0);
Run Code Online (Sandbox Code Playgroud)

基本上想拥有id<number>一个变量.即:

function id<T>(x: T) { return x; }
let idNum = id<number>; // This is what you want
Run Code Online (Sandbox Code Playgroud)

这在语言不正确的.您无法以这种方式创建具体类型.可悲的是,你需要使用一种类型断言,将可靠性的负担放在肩上

let idNum = id as {(x:number):number};
Run Code Online (Sandbox Code Playgroud)

  • https://basarat.gitbooks.io/typescript/content/docs/tips/typeInstantiation.html (3认同)