definiție de tip în obiect literal în dactilografiat

voturi
158

Dactilografiat în clasa este posibil să se declare tipul de proprietate, de exemplu:

class className{
    property : string;
};

Cum ar trebui să scrie cod pentru a declara tipul de proprietate în obiectul literal? O astfel de cod nu compila:

var obj = {
    property: string;
};

(Sunt obtinerea de eroare - Numele de „string“ nu există în domeniul de aplicare curent).

Ce fac greșit sau este un bug?

Întrebat 08/10/2012 la 19:58
sursa de către utilizator
În alte limbi...                            


8 răspunsuri

voturi
226

Ești destul de aproape, trebuie doar să înlocuiți =cu un :. Puteți folosi un tip de obiect literal ( a se vedea secțiunea 3.5.3 spec) sau o interfață. Folosind un tip de obiect literal este aproape de ceea ce ai:

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

Dar puteți utiliza, de asemenea, o interfață

interface MyObjLayout {
    property: string;
}

var obj: MyObjLayout = { property: "foo" };
Publicat 08/10/2012 la 20:08
sursa de către utilizator

voturi
131

Utilizați operatorul turnat pentru a face această succintă (prin turnare nul pentru tipul dorit).

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

Un exemplu mai lung:

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

Acest lucru este mult mai bine decât având două părți (unul pentru a declara tipuri, a doua pentru a declara implicite):

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

Actualizare 2016-02-10 - să se ocupe de TSX (Mulțumiri @Josh)

Utilizati ca operator pentru TSX.

var obj = {
    property: null as string
};

Un exemplu mai lung:

var call = {
    hasStarted: null as boolean,
    hasFinished: null as boolean,
    id: null as number,
};
Publicat 11/10/2012 la 05:50
sursa de către utilizator

voturi
8

Dacă încercați să scrie o adnotare de tip, sintaxa este:

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

Dacă încercați să scrie un obiect literal, sintaxa este:

var x = { property: 'hello' };

Codul dvs. este încercarea de a utiliza un nume de tip într-o poziție de valoare.

Publicat 08/10/2012 la 20:08
sursa de către utilizator

voturi
4

Dactilografiat dacă noi declarăm obiect atunci

[Modificatorul de acces] variabila nume: {// structura obiectului}

private Object:{Key1:string , Key2:number }
Publicat 08/01/2017 la 15:05
sursa de către utilizator

voturi
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());
Publicat 02/10/2019 la 18:56
sursa de către utilizator

voturi
0

În codul:

var obj = {
  myProp: string;
};

De fapt tu crearea unui obiect literal și atribuirea șirul variabil la myProp de proprietate. Deși practică foarte proastă acest lucru ar fi de fapt codul TS valid (nu folosiți acest!):

var string = 'A string';

var obj = {
  property: string
};

Cu toate acestea, ceea ce doriți este că literal obiect este tastat. Acest lucru se poate realiza în diferite moduri:

Interfață:

interface myObj {
    property: string;
}

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

Tip personalizat:

type myObjType = {
    property: string
};

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

Operatorul Cast:

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

Tipul obiectului literal:

var obj: { property: string; } = { property: "Mystring" };
Publicat 05/08/2019 la 12:06
sursa de către utilizator

voturi
0

Sunt surprins că nimeni nu a menționat acest lucru , dar ai putea crea doar o singură interfață numită ObjectLiteral, ca aceasta:

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

Atunci ai folosi, ca aceasta:

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

Ai putea refolosi această singură interfață ori de câte ori doriți.

Mult noroc.

Publicat 20/05/2019 la 11:56
sursa de către utilizator

voturi
0

Dacă încercați să adăugați typings la un destructurate obiect literal, de exemplu , în argumente pentru o funcție, sintaxa este:

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

foo({ bar: true, baz: 'lorem ipsum' });
Publicat 07/03/2019 la 01:22
sursa de către utilizator

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