Typescript 类不实现接口类型

Posted

技术标签:

【中文标题】Typescript 类不实现接口类型【英文标题】:Typescript class doesn't impelement interface types 【发布时间】:2019-06-27 07:22:05 【问题描述】:
interface IFoo 
  method: (ha: string) => void;


class Foo implements IFoo 
  public method(ha) 

悬停在类方法中的'ha'参数表示

参数 'ha' 隐含地具有 'any' 类型,但更好的类型可能是 从使用情况推断

既然类impelements接口,它不应该匹配接口类型吗?如果您尝试为参数 'ha' 赋予与字符串不同的类型,比如数字,它会错误地认为它不能分配给类型字符串,这是有道理的。

那么,为什么我需要在接口和类中都分配 ha 的类型呢?这是预期的行为吗?

【问题讨论】:

【参考方案1】:

目前,TypeScript 不支持。

您可以在这里了解更多信息:https://github.com/Microsoft/TypeScript/issues/23911

这不是一个简单的任务。

这是因为 TypeScript 建立在 javascript 之上,没有像 C# 等其他语言那样的接口解析。

为了给你一些基本的想法,假设你有两个接口 XY 都有相同的方法但不同的类型:

interface X  foo(i: string): string 
interface Y  foo(x: number): number 

在创建实现这两个接口的类时,不能像这样将接口组合在一起:

class K implements X, Y 
  // error: this does not satisfy either interfaces.
  foo(x: number | string): number | string 
    return x
  

对于这个简单的示例,您需要:

class K implements X, Y 
  foo(x: number): number
  foo(x: string): string
  foo(x: number | string): number | string 
    return x
  

即使这样也不理想,因为它不强制输入类型将匹配输出类型。

【讨论】:

以上是关于Typescript 类不实现接口类型的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript语法基础

为啥java类不从实现的接口继承注解?

TypeScript 类使用联合类型字段实现接口导致错误 (2322)

PHP 类型提示与接口和抽象类不相处?

转载:TypeScript 简介与《TypeScript 中文入门教程》

来自接口实现的 Typescript 泛型推断