16

除了使用类型化数组之外,有没有办法在 TypeScript 中用另一种类型参数化一个类型?

KnockoutJs 真的很有必要。

4

4 回答 4

18

尽管正在考虑泛型,但目前还不支持泛型。这是规范必须说的:

注意:TypeScript 目前不支持泛型,但我们希望将它们包含在最终语言中。由于 TypeScript 的静态类型系统没有运行时表现形式,因此泛型将基于“类型擦除”,并且纯粹用作在接口、类和函数签名中表达参数类型关系的管道。

来自第 3 节末尾的 TypeScript 语言规范。

于 2012-10-14T22:24:23.287 回答
14

泛型终于来了:http: //blogs.msdn.com/b/typescript/archive/2013/06/18/announcing-typescript-0-9.aspx

截至目前,它处于测试阶段,因此请谨慎使用。

于 2013-04-25T18:54:50.083 回答
0

我正在使用一个相当肮脏的解决方法。可以将类分配给任何类型的变量。此代码有效:

class A{}
var test:any=A;
var a=new test();

因此,您可以通过添加另一个类型为 any 的参数来参数化您的方法

function(param:any){
    var test=new param();
    test.someFunction();
}

当然,这是非常糟糕的风格,可能不推荐。但对我来说,它将涵盖泛型包含在语言中的时间。

于 2013-01-17T19:44:13.117 回答
0

对于像我这样遇到这个问题的人来说,既然我们在 TypeScript 中有泛型,这里有更多信息,包括 Typescript 网站上泛型官方文档的链接,因为这很好地解释了它,希望始终保持最新进行更改时,并显示示例用法:

https://www.typescriptlang.org/docs/handbook/generics.html

泛型允许创建可以在多种类型而不是单一类型上工作的组件。

如官方文档所示,标识函数是泛型在工作中最基本的说明。身份函数是一个函数,它将返回传入的任何内容。

以下是我们在泛型之前的选择:

// without Generics option 1 - explicitly define and get tied to a single type.  
function identity(arg: number): number {
    return arg;
}

// without Generics option 2 - use the 'any' type 
// but lose type information on the incoming arg by the time we return it.
function identity(arg: any): any {
    return arg;
}

以下是它与泛型一起使用的方式:

// with Generics - use a type variable T that works on types rather than values. 
// Captures the type of incoming arg so we can use it again in the return type
function identity<T>(arg: T): T {
    return arg;
}

// can call it with explicit setting of T to be a given type ('string' here)
let output = identity<string>("myString");  // type of output will be 'string'

// However can also call it without this explicit typing and the compiler will 
// infer the type. Note this won't always work for more complex Generics usage
let output = identity("myString");  // type of output will be 'string'
于 2018-03-17T08:53:48.070 回答