Type Definition i objektetliteratet i script

stemmer
176

I Loggfila i klassen er det mulig å erklære type eiendom, for eksempel:

class className{
    property : string;
};

Hvordan skal jeg skrive kode for å erklære type for eiendom i objekt bokstavelig? Slik kode ikke kompilere:

var obj = {
    property: string;
};

(Jeg får feil - Navnet 'strengen' finnes ikke i dagens omfang).

Hva jeg gjør galt, eller er det en bug?

Publisert på 08/10/2012 klokken 18:58
kilden bruker
På andre språk...                            


8 svar

stemmer
244

Du er ganske nær, du trenger bare å erstatte den =med en :. Du kan bruke en objekttype bokstavelig (se spec avsnitt 3.5.3) eller et grensesnitt. Ved hjelp av en objekttype bokstavelig er i nærheten av hva du har:

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

Men du kan også bruke et grensesnitt

interface MyObjLayout {
    property: string;
}

var obj: MyObjLayout = { property: "foo" };
Svarte 08/10/2012 kl. 19:08
kilden bruker

stemmer
153

Bruk støpt operatøren for å gjøre dette konsis (ved å støpe null til den ønskede type).

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

En lengre eksempel:

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

Dette er mye bedre enn å ha to deler (en å erklære typer, den andre til å erklære mislighold):

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

Oppdatering 2016-02-10 - For å håndtere TSX (Takk @Josh)

Bruk som operatør for TSX.

var obj = {
    property: null as string
};

En lengre eksempel:

var call = {
    hasStarted: null as boolean,
    hasFinished: null as boolean,
    id: null as number,
};
Svarte 11/10/2012 kl. 04:50
kilden bruker

stemmer
9

Hvis du prøver å skrive en type merknad, er syntaksen:

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

Hvis du prøver å skrive et objekt bokstavelig, er syntaksen:

var x = { property: 'hello' };

Koden din prøver å bruke en type navn i en verdi posisjon.

Svarte 08/10/2012 kl. 19:08
kilden bruker

stemmer
5

I typescript hvis vi erklære objekt da

[Adgang modifiserende middel] variable name: {// struktur av objektet}

private Object:{Key1:string , Key2:number }
Svarte 08/01/2017 kl. 15:05
kilden bruker

stemmer
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());
Svarte 02/10/2019 kl. 18:56
kilden bruker

stemmer
0

I koden din:

var obj = {
  myProp: string;
};

Du er faktisk å skape et objekt bokstavelig og tilordne variabelen strengen til eiendommen myProp. Selv om svært dårlig praksis vil dette faktisk være gyldig TS-kode (ikke bruk denne!):

var string = 'A string';

var obj = {
  property: string
};

Men det du ønsker er at objektet bokstave er skrevet. Dette kan oppnås på flere måter:

grensesnitt:

interface myObj {
    property: string;
}

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

Custom Type:

type myObjType = {
    property: string
};

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

Cast operatør:

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

Objekttype bokstavelig:

var obj: { property: string; } = { property: "Mystring" };
Svarte 05/08/2019 kl. 12:06
kilden bruker

stemmer
0

Jeg er overrasket over at ingen har nevnt dette, men du kan bare lage et enkelt grensesnitt som heter ObjectLiteral, som dette:

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

Så du bruker det, som dette:

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

Du kan gjenbruke dette enkelt grensesnitt mange ganger du vil.

Lykke til.

Svarte 20/05/2019 kl. 11:56
kilden bruker

stemmer
0

Hvis du prøver å legge typings til en destrukturisert objekt bokstavelig, for eksempel i argumentene til en funksjon, er syntaksen:

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

foo({ bar: true, baz: 'lorem ipsum' });
Svarte 07/03/2019 kl. 01:22
kilden bruker

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