definizione del tipo in oggetto letterale a macchina

voti
158

A macchina in classe, è possibile dichiarare il tipo per la proprietà, per esempio:

class className{
    property : string;
};

Come dovrei scrivere codice per dichiarare il tipo per la proprietà in oggetto letterale? Tale codice non si compila:

var obj = {
    property: string;
};

(Sto ottenendo errore - Il nome 'stringa' non esiste nell'ambito corrente).

Quello che sto facendo male o si tratta di un bug?

È pubblicato 08/10/2012 alle 19:58
fonte dall'utente
In altre lingue...                            


8 risposte

voti
226

Sei abbastanza vicino, è sufficiente sostituire il =con un :. È possibile utilizzare un tipo di oggetto letterale (vedere la sezione specifica 3.5.3) o un'interfaccia. L'utilizzo di un tipo di oggetto letterale è vicino a quello che si ha:

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

Ma si può anche utilizzare un'interfaccia

interface MyObjLayout {
    property: string;
}

var obj: MyObjLayout = { property: "foo" };
Risposto il 08/10/2012 a 20:08
fonte dall'utente

voti
131

Utilizzare l'operatore di cast per rendere questo succinta (per fusione nullo al tipo desiderato).

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

Un esempio di più:

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

Questo è molto meglio che avere due parti (una per dichiarare tipi, il secondo per dichiarare default):

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

Aggiornamento 2016/02/10 - per gestire TSX (Grazie @Josh)

Utilizzare l'operatore as per TSX.

var obj = {
    property: null as string
};

Un esempio di più:

var call = {
    hasStarted: null as boolean,
    hasFinished: null as boolean,
    id: null as number,
};
Risposto il 11/10/2012 a 05:50
fonte dall'utente

voti
8

Se stai cercando di scrivere un tipo di annotazione, la sintassi è:

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

Se stai cercando di scrivere un oggetto letterale, la sintassi è:

var x = { property: 'hello' };

Il tuo codice sta cercando di utilizzare un nome di tipo in una posizione di valore.

Risposto il 08/10/2012 a 20:08
fonte dall'utente

voti
4

Nel dattiloscritto se noi dichiariamo oggetto poi

[Modificatore di accesso] nome di variabile: {// struttura oggetto}

private Object:{Key1:string , Key2:number }
Risposto il 08/01/2017 a 15:05
fonte dall'utente

voti
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());
Risposto il 02/10/2019 a 18:56
fonte dall'utente

voti
0

Nel codice:

var obj = {
  myProp: string;
};

In realtà si sta creando un oggetto letterale e assegnando la stringa variabile al myProp proprietà. Anche se molto cattiva pratica questo sarebbe in realtà il codice TS valido (non usare questo!):

var string = 'A string';

var obj = {
  property: string
};

Tuttavia, ciò che si vuole è che il valore letterale oggetto viene digitato. Ciò può essere ottenuto in vari modi:

Interfaccia:

interface myObj {
    property: string;
}

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

tipo personalizzato:

type myObjType = {
    property: string
};

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

operatore di cast:

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

Tipo letterale oggetto:

var obj: { property: string; } = { property: "Mystring" };
Risposto il 05/08/2019 a 12:06
fonte dall'utente

voti
0

Sono sorpreso che di nessuno ha menzionato questo, ma si può solo creare un'unica interfaccia chiamata ObjectLiteral, in questo modo:

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

Poi ci si utilizza, in questo modo:

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

Si potrebbe riutilizzare questa singola interfaccia di tutte le volte che vuoi.

In bocca al lupo.

Risposto il 20/05/2019 a 11:56
fonte dall'utente

voti
0

Se stai cercando di aggiungere tipizzazioni a un destrutturata letterale oggetto, ad esempio in argomenti per una funzione, la sintassi è:

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

foo({ bar: true, baz: 'lorem ipsum' });
Risposto il 07/03/2019 a 01:22
fonte dall'utente

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