TypeScript 2.4:"类本地化服务错误地实现了接口 ILocalizationService<LocalizedStrings>"



由于升级我的 TS 版本,我遇到了一些问题。 在升级之前,我有TS 2.3.3,它可以正常工作,因此根据要求,我升级到TS 2.4,此版本给了我几个问题。

我有以下课程:

module DemoSample.Localization {
export class LocalizationService implements someNamespace.Localization.ILocalizationService<LocalizedStrings> {
constructor(private _localizationService: someNamespace.Services.ILocalizationService) {
}
load(): JQueryPromise<ILocalizedStrings> {
var result = $.Deferred<ILocalizedStrings>();
...some dummy logic
return result.promise();
}
}
}

实现具有泛型类型的接口

declare module someNamespace.Localization {
interface ILocalizationService<T> {
load(): JQueryPromise<T>;
}
}

和指定的类型:

module DemoSample.Localization {
export class LocalizedStrings extends someNamespace.Localization.LocalizedStringsBase implements ILocalizedStrings {
constructor() {
super("Test Application");
}
...another dummy logic
}
}

所以我收到以下错误:

  • Class LocalizationService incorrectly implements interface ILocalizationService<LocalizedStrings>
  • Types of property load are incompatible.
  • Type '() => JQueryPromise<ILocalizedStrings> is not assignable to type () => JQueryPromise<LocalizedStrings>'.
  • Type 'ILocalizedStrings' is not assignable to type 'LocalizedStrings'

所以我正在研究 2.4 版的重大更改,但我找不到有关泛型类型接口的一些信息。

中断性更改提到了对泛型函数的更严格检查https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#stricter-checking-for-generic-functions

我是否必须假设新的"功能"对通用接口或类也是严格的?

我是TypeScript的新手,所以我将非常感谢您的帮助。

问候

似乎严格的泛型类型检查(在 TS 2.4 上引入)正在影响此代码块,因为我们指定 ILocalizationService 接口及其函数 load() 必须是相同的类型,因此我们在它们上放置了两种不同的类型,一个类作为接口类型,一个接口作为 load() 函数类型, 因此,两者的类型不同,检查失败。

因此,修复它的解决方法是将LocalizedString类作为两者的相同类型,因为该类已经实现了 load() 函数之前使用的接口,并且现在两者都是相同的类型并且检查成功。

module DemoSample.Localization {
export class LocalizationService implements someNamespace.Localization.ILocalizationService<LocalizedStrings> {
constructor(private _localizationService: someNamespace.Services.ILocalizationService) {}
load(): JQueryPromise<LocalizedStrings> {
var result = $.Deferred<LocalizedStrings>();//the same class as the type
...some dummy logic
return result.promise();
}
}
}

最新更新