在Typescript中,类型和接口有什么区别?

2022-08-30 04:08:06

以下有什么区别?

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

答案 1

接口可以扩展

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;

因此,一般来说,如果您只有一个普通的对象类型,如您的问题所示,则接口通常是更好的方法。如果你发现自己想写一些不能写成接口的东西,或者只想给一些东西一个不同的名称,那么类型别名会更好。


答案 2

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

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

这里看起来几乎相似,所以它令人困惑。type Foointerface Foo

interface是以下属性(此处)应存在于对象中的协定。 莫。当语言不支持多重继承时,将使用它。因此,可以是不同类之间的通用结构。foo:stringinterfaceclassinterface

class Bar implements Foo {
    foo: string;
}

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

但是,和 在非常不同的上下文中使用。typeinterface

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

这里的 是 和 是 。它就像一个变量递减,它保存其他变量类型的信息。 就像接口,类,函数签名,其他类型甚至值(如)的超集。最后描述变量的可能结构或值。typefooFootodayDatetypetype mood = 'Good' | 'Bad'type