2017-09-26 126 views
0

我想定义一个泛型类的构造函数,它需要一个回调,它需要一个泛型类型的集合。尽管我可以成功定义没有集合的回调类型,但是我收到集合的错误。错误是“TS2371:只有在函数或构造函数实现中才允许使用参数初始化程序”。Typescript泛型回调类型提示与泛型集合

这给我的错误,但它是类型定义我想:

import {List} from "immutable"; 
export class BackendToUI<BM, UM> { 
    constructor(private backendToUI: (BM, List<UM>) => UM) {} 
} 

此作品,但是,这不是我想要的类型:

export class BackendToUI<BM, UM> { 
    constructor(private backendToUI: (BM, UM) => UM) {} 
} 

我得到了同样的问题与UM[]Array<UM>,所以这个问题不是由于在不可变列表类型定义中的一些实现问题。

定义提前类型也没有帮助,虽然我没有指望它:

import {List} from "immutable"; 
type backendToUIType<BM, UM> = (BM, List<UM>) => UM; 
export class BackendToUI<BM, UM> { 
    constructor(private backendToUI: backendToUIType<BM, UM>) {} 
} 

任何人都知道如何声明此回调类型?

回答

0

请记住,TypeScript中类型位置的参数名称不是可选的。无论你写了一个函数类型这样

(BM, UM) => UM 

您必须编写参数名称

(b: BM, u: UM) => UM 

例如在这里,而不是

constructor(private backendToUI: (BM, List<UM>) => UM) {} 

您需要在我的部分

constructor(private backendToUI: (b: BM, u: List<UM>) => UM) {} 
+0

感谢,愚蠢的错误。这工作。 – Malina

+0

另外,出于好奇,为什么Typescript在没有参数名称和集合的情况下编译定义?具体来说,为什么会这样编译:'constructor(private backendToUI:(BM,UM)=> UM){}'? – Malina

+0

...回答我自己的问题......这是因为它将BM和UM解释为参数名称而不是类型。 D'哦! – Malina