ορισμό Πληκτρολογήστε αντικείμενο κυριολεκτική στη γραφομηχανή

ψήφοι
158

Στη γραφομηχανή στην τάξη είναι δυνατόν να δηλώσει το είδος της ιδιοκτησίας, για παράδειγμα:

class className{
    property : string;
};

Πώς πρέπει να γράψετε κώδικα για να δηλώσει τον τύπο για την ιδιοκτησία στο αντικείμενο κυριολεκτική; Οι εν λόγω κώδικας δεν συγκεντρώνουν:

var obj = {
    property: string;
};

(Έχω πάρει λάθος - Το όνομα «κορδόνι» δεν υπάρχει στο τρέχον πεδίο εφαρμογής).

Τι κάνω λάθος ή είναι ένα bug;

Δημοσιεύθηκε 08/10/2012 στις 19:58
πηγή χρήστη
Σε άλλες γλώσσες...                            


8 απαντήσεις

ψήφοι
226

Είσαι πολύ κοντά, το μόνο που χρειάζεται για να αντικαταστήσει το =με ένα :. Μπορείτε να χρησιμοποιήσετε έναν τύπο αντικειμένου κυριολεκτική (βλέπε spec ενότητα 3.5.3) ή μια διεπαφή. Χρησιμοποιώντας έναν τύπο αντικειμένου κυριολεκτική είναι κοντά σε αυτό που έχετε:

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

Αλλά μπορείτε επίσης να χρησιμοποιήσετε μια διεπαφή

interface MyObjLayout {
    property: string;
}

var obj: MyObjLayout = { property: "foo" };
Απαντήθηκε 08/10/2012 στις 20:08
πηγή χρήστη

ψήφοι
131

Χρησιμοποιήστε το τελεστής cast να κάνουν αυτό το συνοπτικό (με χύτευση null στον επιθυμητό τύπο).

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

Μια μεγαλύτερη παράδειγμα:

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

Αυτό είναι πολύ καλύτερο από ό, τι έχει δύο τμήματα (το ένα να δηλώσει τους τύπους, το δεύτερο να δηλώσει προεπιλογές):

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

Ενημέρωση 10/2/2016 - να χειριστείτε TSX (Χάρη @Josh)

Χρησιμοποιήστε το ως φορέας για TSX.

var obj = {
    property: null as string
};

Μια μεγαλύτερη παράδειγμα:

var call = {
    hasStarted: null as boolean,
    hasFinished: null as boolean,
    id: null as number,
};
Απαντήθηκε 11/10/2012 στις 05:50
πηγή χρήστη

ψήφοι
8

Αν προσπαθείτε να γράψετε ένα σχόλιο τύπου, η σύνταξη είναι:

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

Αν προσπαθείτε να γράψει ένα αντικείμενο γραμματική, το συντακτικό είναι:

var x = { property: 'hello' };

Ο κωδικός σας προσπαθεί να χρησιμοποιήσει ένα όνομα τύπου σε μια θέση αξίας.

Απαντήθηκε 08/10/2012 στις 20:08
πηγή χρήστη

ψήφοι
4

Σε γραφομηχανή αν είμαστε δηλώνοντας αντικείμενο, στη συνέχεια,

[Τροποποιητής της πρόσβασης] όνομα μεταβλητής: {// δομή του αντικειμένου}

private Object:{Key1:string , Key2:number }
Απαντήθηκε 08/01/2017 στις 15:05
πηγή χρήστη

ψήφοι
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());
Απαντήθηκε 02/10/2019 στις 18:56
πηγή χρήστη

ψήφοι
0

Σε κωδικό σας:

var obj = {
  myProp: string;
};

Είστε πραγματικά τη δημιουργία ενός αντικειμένου γραμματική και την ανάθεση της μεταβλητής συμβολοσειράς στο myProp ιδιοκτησίας. Αν και πολύ κακή πρακτική αυτή θα είναι πραγματικά έγκυρο κωδικό TS (μη χρησιμοποιείτε αυτό!):

var string = 'A string';

var obj = {
  property: string
};

Ωστόσο, αυτό που θέλετε είναι ότι η γραμματική αντικείμενο πληκτρολογήσει. Αυτό μπορεί να επιτευχθεί με διάφορους τρόπους:

Διεπαφή:

interface myObj {
    property: string;
}

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

Προσαρμοσμένο τύπο:

type myObjType = {
    property: string
};

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

Ηθοποιοί χειριστή:

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

Τύπος αντικειμένου κυριολεκτική:

var obj: { property: string; } = { property: "Mystring" };
Απαντήθηκε 05/08/2019 στις 12:06
πηγή χρήστη

ψήφοι
0

Είμαι έκπληκτος που αναφέρονται κανείς δεν είναι αυτό, αλλά θα μπορούσε απλά να δημιουργήσει ένα ενιαίο περιβάλλον εργασίας που ονομάζεται ObjectLiteral, όπως αυτό:

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

Στη συνέχεια θα ήθελα να το χρησιμοποιήσετε, όπως αυτό:

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

Θα μπορούσατε να χρησιμοποιήσετε ξανά αυτό το ενιαίο περιβάλλον εργασίας όσες φορές θέλετε.

Καλή τύχη.

Απαντήθηκε 20/05/2019 στις 11:56
πηγή χρήστη

ψήφοι
0

Αν προσπαθείτε να προσθέσετε typings σε μια αποδομημένη αντικείμενο κυριολεκτική, για παράδειγμα σε επιχειρήματα σε μια λειτουργία, η σύνταξη είναι:

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

foo({ bar: true, baz: 'lorem ipsum' });
Απαντήθηκε 07/03/2019 στις 01:22
πηγή χρήστη

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