Typedefinitie object in letterlijke schrijfmachine

stemmen
158

Schrijfmachine in de klas is het mogelijk om het type te verklaren voor onroerend goed, bijvoorbeeld:

class className{
    property : string;
};

Hoe moet ik code te schrijven type verklaren voor onroerend goed in letterlijk object? Een dergelijke code niet samen te stellen:

var obj = {
    property: string;
};

(Ik krijg error - De naam 'string' bestaat niet in de huidige scope).

Wat ik verkeerd doe, of het is een bug?

De vraag is gesteld op 08/10/2012 om 19:58
bron van user
In andere talen...                            


8 antwoorden

stemmen
226

Je bent vrij dicht, je hoeft alleen maar naar de vervanging van =met een :. U kunt een objecttype literal (zie spec paragraaf 3.5.3) of een interface. Met behulp van een soort object letterlijke ligt dicht bij wat je hebt:

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

Maar je kunt ook een interface

interface MyObjLayout {
    property: string;
}

var obj: MyObjLayout = { property: "foo" };
antwoordde op 08/10/2012 om 20:08
bron van user

stemmen
131

Met de cast operator deze beknopte maken (door nul gieten om het gewenste).

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

Een langere voorbeeld:

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

Dit is veel beter dan twee delen (een tot types verklaren de tweede standaardinstellingen verklaren):

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

Update 2016/02/10 - Om TSX Handle (Thanks @Josh)

Gebruik het als operator voor TSX.

var obj = {
    property: null as string
};

Een langere voorbeeld:

var call = {
    hasStarted: null as boolean,
    hasFinished: null as boolean,
    id: null as number,
};
antwoordde op 11/10/2012 om 05:50
bron van user

stemmen
8

Als je probeert om een ​​soort annotatie te schrijven, is de syntaxis:

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

Als je probeert om een ​​object te schrijven letterlijke, de syntax is:

var x = { property: 'hello' };

Uw code probeert om een ​​soort naam te gebruiken in een waarde positie.

antwoordde op 08/10/2012 om 20:08
bron van user

stemmen
4

In typoscript als we verklaren object vervolgens

[Access modifier] variabele: {// structuur voorwerp}

private Object:{Key1:string , Key2:number }
antwoordde op 08/01/2017 om 15:05
bron van user

stemmen
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());
antwoordde op 02/10/2019 om 18:56
bron van user

stemmen
0

In uw code:

var obj = {
  myProp: string;
};

Je bent eigenlijk het creëren van een object letterlijke en het toewijzen van de variabele tekenreeks om het pand myProp. Hoewel zeer slechte gewoonte dit ook daadwerkelijk geldige TS code zou zijn (dit niet gebruiken!):

var string = 'A string';

var obj = {
  property: string
};

Maar wat je wilt is dat het object letterlijke wordt getypt. Dit kan worden bereikt op verschillende manieren:

Interface:

interface myObj {
    property: string;
}

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

Aangepast type:

type myObjType = {
    property: string
};

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

Cast operator:

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

objecttype letterlijk:

var obj: { property: string; } = { property: "Mystring" };
antwoordde op 05/08/2019 om 12:06
bron van user

stemmen
0

Ik ben verbaasd dat niemand vermeld dit maar je kon gewoon een enkele interface genaamd ObjectLiteral, als volgt uit:

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

Dan zou je het te gebruiken, zoals deze:

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

Je zou kunnen hergebruiken deze enkele interface vaak als je wilt.

Succes.

antwoordde op 20/05/2019 om 11:56
bron van user

stemmen
0

Als je probeert te typeringen toe te voegen aan een gedestructureerd letterlijk object, bijvoorbeeld in argumenten voor een functie, is de syntaxis:

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

foo({ bar: true, baz: 'lorem ipsum' });
antwoordde op 07/03/2019 om 01:22
bron van user

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