【问题标题】:TypeScript excess properties error with return type annotation but not when implementing an interface带有返回类型注释的 TypeScript 过多属性错误,但在实现接口时没有
【发布时间】:2019-01-18 19:04:38
【问题描述】:

我希望B级不能像C级一样通过。

Class C的编译错误如下:

键入'{名称:字符串;一些:字符串; }' 不可分配给类型“信息”。 对象字面量只能指定已知属性,而 'some' 不存在于类型 'Info' 中。

interface Info {
  name: string;
}

interface Person {
  info(): Info;
}

class B implements Person {
    info() {
        return {
            name: "li",
            some: "1",
        };
    }
}

class C {
    info():Info {
        return {
            name: "li",
            some: "1",
        };
    }
}

【问题讨论】:

    标签: typescript


    【解决方案1】:

    TypeScript 仅当您在立即知道所需类型的上下文中使用对象字面量时检查多余的属性,例如在 C 类中(因为您注释了返回类型)。在 B 类中,TypeScript 首先根据返回的表达式推断info 的返回类型,即{name: string, some: string}。到那时,已经跳过了多余的属性检查。然后 TypeScript 会检查推断的类型是否可以分配给接口指定的类型 Info,它就是。

    不幸的是,C 类的错误消息具有误导性。一般来说,{ name: string; some: string; } 类型 可分配给Info 类型;它只是 { name: string; some: string; } 类型的“新鲜”对象文字,不能分配给 Info

    【讨论】:

    猜你喜欢
    • 2023-02-21
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    相关资源
    最近更新 更多