В Typescript, в чем разница между типом и интерфейсом?



каковы различия между следующими?



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

7 ответов:

интерфейсы extended

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;

Так что в целом, если у вас просто есть простой тип объекта, как показано в вашем вопросе, интерфейс обычно является лучшим подходом. Если вы обнаружите, что хотите написать что-то, что не может быть написано как интерфейс, или хотите просто дать что-то другое имя, a псевдоним типа лучше.

спецификация имеет хорошее обсуждение -https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#3.10

кроме того, интерфейс может быть реализовала.

типы-это своего рода интерфейсы и наоборот: оба могут быть реализованы классом. но есть некоторые важные различия: 1. когда тип реализуется классом, свойства, принадлежащие типу, должны быть инициализированы внутри класса, тогда как с интерфейсом они должны быть объявлены. 2. как отметил @ ryan: интерфейс может расширить другой интерфейс. Типы не могут.

type Person = {
    name:string;
    age:number;
}

// must initialize all props - unlike interface
class Manager implements Person {
    name: string = 'John';
    age: number = 55;

    // can add props and methods
    size:string = 'm';
}

const jane : Person = {
    name :'Jane',
    age:46,

    // cannot add more proprs or methods
    //size:'s'
}

различия между ними тоже уже есть в этой теме.

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

здесь type Foo иinterface Foo выглядит почти так же, как его запутать.

interface это контракт, что следующие свойства (здесьfoo:string) должен быть там в объекте. interface не class. Он используется, когда язык не поддерживает множественное наследование. Так что interface может быть общей структурой между различными классами.

class Bar implements Foo {
    foo: string;
}

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

ноtype и interface используются в совсем другой контекст.

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

здесь type на foo и Foo и today и Date. Его как переменная decleration, которая содержит информацию о typeof другой переменной. type похоже на надмножество интерфейсов, классов, сигнатур функций, других типов или даже значений (например,type mood = 'Good' | 'Bad'). В конце концов type описывает возможную структуру или значение переменной.

неправильно говорить "интерфейсы могут быть реализованы", так как типы также могут быть реализованы

type A = { a: string };


class Test implements A {

    a: string;
}

хотя вы можете это сделать, вы не можете реализовать тип, который является объединением типов, что имеет полный смысл честно :)

Правило Буравчика

всегда использовать interface Если это возможно. В противном случае играть с type.

смотрите документацию здесь. https://www.typescriptlang.org/docs/handbook/advanced-types.html

Comments

    Ничего не найдено.