Definición de tipo de objeto literal a máquina de escribir

votos
158

A máquina de escribir en la clase es posible declarar el tipo de propiedad, por ejemplo:

class className{
    property : string;
};

¿Cómo debo escribir código para declarar el tipo de propiedades en objeto literal? Este código no se compila:

var obj = {
    property: string;
};

(Estoy consiguiendo error - El nombre de 'cadena' no existe en el ámbito actual).

Lo que estoy haciendo mal o es un error?

Publicado el 08/10/2012 a las 19:58
fuente por usuario
En otros idiomas...                            


8 respuestas

votos
226

Estás muy cerca, sólo tiene que sustituir a la =de una :. Se puede utilizar un tipo de objeto literal (véase la sección 3.5.3 de especificaciones) o una interfaz. El uso de un tipo de objeto literal es cercano a lo que usted tiene:

var obj: { property: string; } = { property: "foo" };

Pero también se puede utilizar una interfaz

interface MyObjLayout {
    property: string;
}

var obj: MyObjLayout = { property: "foo" };
Respondida el 08/10/2012 a las 20:08
fuente por usuario

votos
131

Utilice el operador de conversión para hacer esta breve (por colada nulo al tipo deseado).

var obj = {
    property: <string> null
};

Un ejemplo más:

var call = {
    hasStarted: <boolean> null,
    hasFinished: <boolean> null,
    id: <number> null,
};

Esto es mucho mejor que tener dos partes (una para declarar tipos, la segunda para declarar valores por defecto):

var callVerbose: {
    hasStarted: boolean;
    hasFinished: boolean;
    id: number;
} = {
    hasStarted: null,
    hasFinished: null,
    id: null,
};

Actualización 10/02/2016 - Para manipular TSX (Gracias @ Josh)

Utilice el operador as para TSX.

var obj = {
    property: null as string
};

Un ejemplo más:

var call = {
    hasStarted: null as boolean,
    hasFinished: null as boolean,
    id: null as number,
};
Respondida el 11/10/2012 a las 05:50
fuente por usuario

votos
8

Si usted está tratando de escribir una anotación de tipo, la sintaxis es:

var x: { property: string; } = ...;

Si usted está tratando de escribir un objeto literal, la sintaxis es:

var x = { property: 'hello' };

Su código está tratando de usar un nombre de tipo en una posición de valor.

Respondida el 08/10/2012 a las 20:08
fuente por usuario

votos
4

A máquina si estamos declarando objeto se

[Modificador de acceso] nombre de la variable: {// estructura de objeto}

private Object:{Key1:string , Key2:number }
Respondida el 08/01/2017 a las 12:05
fuente por usuario

votos
0
// Use ..

const Per = {
  name: 'HAMZA',
  age: 20,
  coords: {
    tele: '09',
    lan: '190'
  },
  setAge(age: Number): void {
    this.age = age;
  },
  getAge(): Number {
    return age;
  }
};
const { age, name }: { age: Number; name: String } = Per;
const {
  coords: { tele, lan }
}: { coords: { tele: String; lan: String } } = Per;

console.log(Per.getAge());
Respondida el 02/10/2019 a las 18:56
fuente por usuario

votos
0

En su código:

var obj = {
  myProp: string;
};

En realidad está creando un objeto literal y la asignación de la cadena variable en el myProp propiedad. Aunque es muy mala práctica esto sería en realidad código TS válida (no utilice este!):

var string = 'A string';

var obj = {
  property: string
};

Sin embargo, lo que quiere es que el objeto literal que se escribe. Esto se puede lograr de varias maneras:

Interfaz:

interface myObj {
    property: string;
}

var obj: myObj = { property: "My string" };

Tipo de medida:

type myObjType = {
    property: string
};

var obj: myObjType = { property: "My string" };

operador de conversión:

var obj = {
    myString: <string> 'hi',
    myNumber: <number> 132,
};

Tipo de objeto literal:

var obj: { property: string; } = { property: "Mystring" };
Respondida el 05/08/2019 a las 12:06
fuente por usuario

votos
0

Me sorprende que se menciona de que nadie esto, pero que sólo podría crear una única interfaz llamada ObjectLiteral, así:

interface ObjectLiteral {
  [key: string]: any;
}

A continuación, tendrá que utilizar, como aquí:

let data: ObjectLiteral = {
  hello: "world",
  goodbye: 1,
  // ...
};

Se podría volver a usar esta interfaz única tantas veces como desee.

Buena suerte.

Respondida el 20/05/2019 a las 11:56
fuente por usuario

votos
0

Si usted está tratando de añadir tipificaciones a un desestructurado objeto literal, por ejemplo, en los argumentos a una función, la sintaxis es:

function foo({ bar, baz }: { bar: boolean, baz: string }) {
  // ...
}

foo({ bar: true, baz: 'lorem ipsum' });
Respondida el 07/03/2019 a las 01:22
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more