2017-09-26 206 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