方法如何作为接口返回 null

Mhd*_*Mhd 5 javascript resharper typescript

给出这个 TypeScript 代码:

interface MyInterface{
    myInterfaceProperty: string
}

class MyClass{
    myClassProperty: MyInterface

    myClassMethod(flag: boolean): MyInterface {
       if (flag)
           return null;

       myClassProperty = //...
       return myClassProperty;
    }
}
Run Code Online (Sandbox Code Playgroud)

该代码编译良好,但ReSharper抱怨return null;

无法将类型“any”隐藏为类型“MyInterface”

返回空接口的正确方法是什么?

Ale*_*tie 6

一个问题是 Typescript 将 null 和 undefined 都视为不同的类型,而不是 MyInterface 对象的未初始化状态。您可以在 Typescript 文档中找到对此的提及和进一步讨论:此处

您可以更改 myClassMethod 的类型定义以包含 null 作为可能的返回类型之一,如下所示:

myClassMethod(flag: boolean): MyInterface | null {
Run Code Online (Sandbox Code Playgroud)

但是,您列出的错误似乎不是空值的结果。这更有可能是由 myClassMethod 的实现引起的。在 myClassMethod 内部 - 至少在本例中 - 您没有引用 this.myClassProperty (实现 MyInterface 接口的对象),但实际上正在创建一个没有类型且不一定实现所需属性的新变量myInterfaceProperty

将此更改为this.myClassProperty可能会修复此错误。