当前位置: 首页 > 知识库问答 >
问题:

在TypeScript中,类型和接口之间的区别是什么?

马涵蓄
2023-03-14

以下两者之间有什么区别?

type Foo = { 
    foo: string 
};
interface Foo {
   foo: string;
}

共有3个答案

宦树
2023-03-14

说“接口可以实现”是错误的,因为类型也可以实现

type A = { a: string };


class Test implements A {

    a: string;
}

尽管您可以这样做,但您不能实现一个类型联合的类型,老实说,这完全有道理:)

邢宏浚
2023-03-14

这些之间的差异也已经存在于这个线程中。

type Foo = {
    foo: string
};
interface Foo {
    foo: string;
}

这里的类型Foo接口Foo看起来几乎相似,所以很容易混淆。

接口表示对象中应包含以下属性(此处为foo: string)。当语言不支持多重继承时使用。所以接口可以是不同类之间的通用结构。

class Bar implements Foo {
    foo: string;
}

let p: Foo = { foo: 'a string' };

但是类型接口在非常不同的上下文中使用。

let foo: Foo;
let today: Date = new Date();

这里footypefootodayDate。它就像一个变量的偏差,保存着其他变量的类型信息<代码>类型就像是接口、类、函数签名、其他类型甚至值的超集(比如类型mood='Good'|'Bad')。在末尾,类型描述了变量的可能结构或值。

曹茂材
2023-03-14

接口可以扩展

interface A {
  x: number;
}
interface B extends A {
  y: string;
}

而且还增强了

interface C {
  m: boolean;
}
// ... later ...
interface C {
  n: number;
}

但是,类型别名可以表示接口无法表示的某些内容

type NumOrStr = number | string;
type NeatAndCool = Neat & Cool;
type JustSomeOtherName = SomeType;

所以一般来说,如果你只有一个简单的对象类型,如你的问题所示,接口通常是一个更好的方法。如果你发现自己想写一些不能作为接口写的东西,或者想给一些东西一个不同的名字,类型别名更好。

 类似资料:
  • 我需要为对后端服务器的HTTP请求创建某种类型(使用Angular 2),例如:}, 我应该用什么来构建这些模型?谢谢!

  • 我发现他们有同样的限制。 正如我所发现的,这两者之间没有明显的区别,因为它们都实施了相同的限制。我唯一注意到的是继承和实现。 类只能扩展到单个基类 一个类可以实现多个接口。

  • 在TypeScript中,当创建.d.ts源代码声明文件时,哪个更可取,为什么? 或 我能说出的区别是接口不能有静态方法,所以你必须为此使用一个类。两者都不产生任何JS输出,所以也许没关系?

  • 问题内容: 我不清楚两者之间的区别。 谢谢 问题答案: 它们非常相似,但是存在一些重要的技术差异: 抽象类允许您为某些方法提供默认的实现,但是接口不允许您提供任何实现。 您可以实现多个接口,但只能从一个抽象类继承。 这些差异影响应使用两种技术的方式: 您应该使用接口来 定义合同 。 抽象类对于 重用代码 很有 用 ……但是请注意,它不是重用代码的唯一方法。您还应该考虑其他方法,例如遏制。

  • 问题内容: 嗨,我在我的经验中都使用了这两种方法,而我当时在想方法和类型都是 POST 和 GET 方法。 但是似乎它们并不相似。 如果我使用它正在工作,我是一个表格数据。 如果我写它不起作用,谁能解释他们之间的区别是什么..? 帮助是适当的。 问题答案: 类型(默认:’GET’)类型:字符串方法的别名。 如果您使用的是1.9.0之前的jQuery版本, 则应使用 type。 http://api

  • 问题内容: Python中的抽象类和接口有什么区别? 问题答案: 有时您会看到以下内容: 因为Python没有(也不需要)正式的Interface协定,所以抽象和接口之间不存在Java风格的区别。如果有人努力定义一个正式的接口,它也将是一个抽象类。唯一的区别在于文档字符串中所述的意图。 当您进行鸭类输入时,抽象和接口之间的区别是令人不解的事情。 Java使用接口是因为它没有多重继承。 由于Pyth