接口和具体类型变量是可以互换的,虽然我在类和接口中定义了名称,但是编译器在抱怨.

界面Ibar

interface IBar { // IP
    readonly name: string;
}

班级栏

class Bar implements IBar { // P
    protected readonly _name: string;

    public get name(): string {
        return this._name;
    }
}

Use

let bar = new Bar(); // concrete type
let factory: () => IBar = () => new Bar(); // interface type

// assigning an interface type result to concrete type var
bar = factory(); // TS2739: Type IBar is missing the following properties from type Bar: _name, name

Attached Screenshotenter image description here

推荐答案

let bar = new Bar();号线上 您实际上是在说bar是Bar类型,然后在以后调用Factory时try 为它分配一个Ibar实例(最初只是在运行时的一个Bar,而不是在它是Ibar的类型级别上).

如果你要做以下事情:

let bar: IBar = new Bar();

或者(虽然我猜你不想这样)

let factory: () => Bar = () => new Bar();

这将解决这个问题.

Typescript相关问答推荐

如何从具有给定键列表的对象类型的联合中构造类型

带有联合参数的静态大小数组

如何在使用`Next—intl`和`next/link`时导航

带占位符的模板文字类型何时扩展另一个?

表单嵌套太深

CDK从可选的Lambda角色属性承担角色/复合主体中没有非空断言

如何在已知基类的任何子类上使用`extends`?

如何使所有可选字段在打印脚本中都是必填字段,但不能多或少?

保护函数调用,以便深度嵌套的对象具有必须与同级属性函数cargument的类型匹配的键

常量类型参数回退类型

在Mac和Windows上运行的Web应用程序出现这种对齐差异的原因是什么?(ReactNative)

如何从MAT-FORM-FIELD-MAT-SELECT中移除焦点?

如何将类似数组的对象(字符串::匹配结果)转换为类型脚本中的数组?

如何在不违反挂钩规则的情况下动态更改显示内容(带有状态)?

作为函数参数的联合类型的键

map 未显示控制台未显示任何错误@reaction-google-map/api

两个接口的TypeScript并集,其中一个是可选的

const nav: typechecking = useNavigation() 和 const nav = useNavigation() 之间有什么区别?

React router - 如何处理嵌套路由?

在 TypeScript 中实现类型级别深度优先搜索