在下面的最后一行中,我想实例化一个多态函数并将其作为参数传递.
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表达式:...在函数调用中键入参数......"这显然意味着"仅在函数调用中键入参数".
清理代码示例以明确目的.您需要以下内容:
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)
| 归档时间: |
|
| 查看次数: |
1478 次 |
| 最近记录: |