Typescript 什么';这个签名怎么了?(打字稿-2.5)
我有一个接口Typescript 什么';这个签名怎么了?(打字稿-2.5),typescript,Typescript,我有一个接口 export interface ITypeAssertions { isOfTypeElseFail<TExpected extends TActual, TActual>(value: TActual, oxIsOfType: (xVal: TActual) => boolean): value is TExpected; } 导出接口ITypeAssertions { isOfTypeElseFail(值:TActual
export interface ITypeAssertions
{
isOfTypeElseFail<TExpected extends TActual, TActual>(value: TActual, oxIsOfType: (xVal: TActual) => boolean): value is TExpected;
}
导出接口ITypeAssertions
{
isOfTypeElseFail(值:TActual,OxiSoftType:(xVal:TActual)=>布尔值):值是预期值;
}
和实施
export class NodeJsTestingFrameworkAdapter implements ITypeAssertions
{
isOfTypeElseFail<TExpected extends TActual, TActual>(value: TActual, oxIsOfType: (xVal: TActual) => boolean): value is TExpected
{
throw new Error("Method not implemented.");
}
}
导出类NodeJsTestingFrameworkAdapter实现ITypeAssertions
{
isOfTypeElseFail(值:TActual,OxiSoftType:(xVal:TActual)=>布尔值):值是预期值
{
抛出新错误(“方法未实现”);
}
}
编译器抱怨说:
- 接口未正确实现
- (……)
- 类型谓词“value is TActual”不可赋值给“value is”
t预期'
- 类型“TActual”不可分配给类型“TExpected”
- 类型谓词“value is TActual”不可赋值给“value is”
t预期'
- (……)
PS.在Ts-2.3下编译很好。您必须小心地将
接口(而不是接口方法)和类(而不是接口实现方法)定义为通用:
interface ITypeAssertions<TActual, TExpected extends TActual>
{
isOfTypeElseFail(value: TActual, oxIsOfType: (xVal: TActual) => boolean): value is TExpected;
}
export class NodeJsTestingFrameworkAdapter<TActual, TExpected extends TActual> implements ITypeAssertions<TActual, TExpected>
{
isOfTypeElseFail (value: TActual, oxIsOfType: (xVal: TActual) => boolean): value is TExpected
{
return true;
}
}
接口ITypeAssertions
{
isOfTypeElseFail(值:TActual,OxiSoftType:(xVal:TActual)=>布尔值):值是预期值;
}
导出类NodeJsTestingFrameworkAdapter实现ITypeAssertions
{
isOfTypeElseFail(值:TActual,OxiSoftType:(xVal:TActual)=>布尔值):值是预期值
{
返回true;
}
}
这是在计算机上编译的
不幸的是,根据您的评论,这不是您想要的,因为它迫使您使用每一对类型实现该类。目前没有机会让它工作,正如github.com/Microsoft/TypeScript/issues/18202下的响应中所述。我猜您确实希望返回值是一个类型保护,如果我把它改成return bool,它就可以工作了me@TitianCernicova-Dragomir,但是将返回值从值is T
更改为bool
会使它不像OP希望的那样成为泛型类型保护,是吗?版本2.4引入了更严格的泛型类型推断,这可能会导致问题。不幸的是,我很难确切地理解为什么会发生这种情况。更奇怪的是,它在没有用户定义的类型保护的情况下工作。我建议将问题提交到正式的TypeScript存储库中。谢谢你的提示。它已注册为,但问题是我不希望整个类型被参数化;这将导致我为我想要测试的每种类型的对象实现接口。我需要(tester:ITypeAssertions=…),(tester:ITypeAssertions=…)等等,正如我所提到的,它确实用于Ts-2.3。事实上,这确实让我有点放心。我努力去理解它是如何在没有一些“过于松散”的编译检查的情况下工作的+1获取语言直接回购的最终答案。