ts desde cero - día03

Aprenda un concepto muy importante hoy: interfaz

Definición de interfaz

En los lenguajes orientados a objetos, la interfaz es un concepto muy importante: es una abstracción del comportamiento y la forma de hacerlo específicamente debe implementarse por clase.

La interfaz en TypeScript es un concepto muy flexible: además de abstraer parte del comportamiento de la clase , también se usa a menudo para describir la "forma del objeto (Forma)".

un ejemplo muy simple

interface Person {
    name: string;
    age: number;
}

let tom: Person = {
    name: 'Tom',
    age: 25
};

En lo anterior, definimos una interfaz Persona (la interfaz generalmente está en mayúscula) y luego definimos una variable tom,

Su tipo es  Person. tom De esta manera, la forma que restringimos  debe ser coherente con la interfaz Persona . Ahora que estamos hablando de restringir la forma de Tom, es decir, no está permitido definir variables que tengan menos atributos que la interfaz. Por ejemplo, cuando define Tom, no hay atributo de edad, entonces ts informará es un error, entonces tengo un atributo de sexo (género) más. Eso no es posible, pero a veces no queremos que todos los atributos coincidan exactamente con la interfaz, por lo que se pueden usar atributos opcionales . Por ejemplo:
 

interface Person {
    name: string;
    age: number;
    sex?:string
}

let tom: Person = {
    name: 'Tom',
    age: 25
};

Ahora el sexo es opcional, lo que significa que no puede existir, pero no se permite agregar atributos indefinidos. 

Entonces, ¿cómo debería definir una interfaz más "libre"?

Entonces necesitas usar cualquier atributo de la interfaz, por ejemplo:

interface Person {
    name: string;
    age?: number;
    [propName: string]: any;
}

let tom: Person = {
    name: 'Tom',
    gender: 'male'
};

[propName: string]: cualquiera; Define que cualquier propiedad toma el valor de string, pero cabe señalar que una vez definida cualquier propiedad, el tipo de la propiedad definida y la propiedad opcional deben ser un subconjunto de su tipo, por ejemplo :

interface Person {
    name: string;
    age?: number;
    [propName: string]: string;
}

let tom: Person = {
    name: 'Tom',
    age: 25,
    gender: 'male'
};

En el ejemplo anterior, se permite que el valor de cualquier atributo sea una cadena, pero el valor del atributo opcional edad es un número. Número no es un subtipo de cadena, por lo que se informará un error .

Una interfaz solo puede definir un atributo arbitrario. Si hay varios tipos de atributos en la interfaz, el tipo conjunto se puede utilizar en cualquier atributo. 

interface Person {
    name: string;
    age?: number;
    [propName: string]: string | number;
}

let tom: Person = {
    name: 'Tom',
    age: 25,
    gender: 'male'
};

A veces queremos que algunos campos del objeto se asignen solo cuando se crean, por lo que podemos  readonly definir propiedades de solo lectura:

atributo de solo lectura

interface Person {
    readonly id: number;
    name: string;
    age?: number;
    [propName: string]: any;
}

let tom: Person = {
    id: 89757,
    name: 'Tom',
    gender: 'male'
};

tom.id = 9527;

En el ejemplo anterior, agregamos una restricción de solo lectura a id, al que se le asignó un valor de 89757 , y luego se le asignó un valor. Por supuesto, se informará un error. Tenga en cuenta que la restricción de solo lectura existe al asignar un valor. a un objeto por primera vez, y No al asignar un valor a una propiedad de solo lectura por primera vez

 Gracias a: tsblog

Supongo que te gusta

Origin blog.csdn.net/qq_45662523/article/details/126444025
Recomendado
Clasificación