Daktilo edebi nesne yazın tanımı

oy
158

sınıfta daktilo örneğin, özellik için türü bildirmek mümkündür:

class className{
    property : string;
};

Nasıl değişmezi nesnesinde özellik için türünü bildirmek için kod yazmak gerekir? Böyle kod derleme yok:

var obj = {
    property: string;
};

(Ben hatası alıyorum - adı 'dize' geçerli kapsamda yoktur).

ya da bir hata Nerede yanlış yapıyorum nedir?

Oluştur 08/10/2012 saat 19:58
kaynak kullanıcı
Diğer dillerde...                            


8 cevaplar

oy
226

Sen sadece değiştirmeniz gerekiyor, çok yakınsın =bir ile :. Sen değişmezi bir nesne türü (Spec bölüm 3.5.3) veya bir arayüzü kullanabilirsiniz. Değişmezi bir nesne türünün kullanılması size ne kadar yakındır:

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

Ama aynı zamanda bir arayüz kullanabilirsiniz

interface MyObjLayout {
    property: string;
}

var obj: MyObjLayout = { property: "foo" };
Cevap 08/10/2012 saat 20:08
kaynak kullanıcı

oy
131

(Istenen tipine boş döküm), bu öz hale getirmek için döküm operatörünü kullanın.

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

Daha uzun bir örneği:

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

Bu iki parça (bir varsayılan bildirmek için, ikinci türde bildirmek için) sahip olan çok daha iyidir:

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

Güncelleme 2016/02/10 - TSX Kolu için (teşekkürler @Josh)

TSX için operatör olarak kullanın.

var obj = {
    property: null as string
};

Daha uzun bir örneği:

var call = {
    hasStarted: null as boolean,
    hasFinished: null as boolean,
    id: null as number,
};
Cevap 11/10/2012 saat 05:50
kaynak kullanıcı

oy
8

Bir tür ek açıklaması yazmaya çalışıyorsanız, sözdizimi:

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

Eğer bir nesne değişmezi yazmaya çalışıyorsanız, sözdizimi:

var x = { property: 'hello' };

Kodunuz bir değer konumunda bir tür adı kullanmaya çalışıyor.

Cevap 08/10/2012 saat 20:08
kaynak kullanıcı

oy
4

typescript biz sonra nesneyi ilan eğer

[Erişim değiştiricisi] değişken adı: {// cismin yapı}

private Object:{Key1:string , Key2:number }
Cevap 08/01/2017 saat 15:05
kaynak kullanıcı

oy
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());
Cevap 02/10/2019 saat 18:56
kaynak kullanıcı

oy
0

Kodunuzda:

var obj = {
  myProp: string;
};

Aslında değişmez bir nesne oluşturma ve özellik myProp değişken dize atıyorsunuz. Bu çok kötü bir uygulama aslında geçerli TS kodunu olacağını rağmen (bu kullanmayın!):

var string = 'A string';

var obj = {
  property: string
};

Ancak, ne istediğini nesne değişmezi yazıldığında olmasıdır. Bu çeşitli şekillerde elde edilebilir:

Arayüz:

interface myObj {
    property: string;
}

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

Özel Türü:

type myObjType = {
    property: string
};

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

Cast operatörü:

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

Nesne türü değişmezi:

var obj: { property: string; } = { property: "Mystring" };
Cevap 05/08/2019 saat 12:06
kaynak kullanıcı

oy
0

Kimse en bu sözü ama sadece adında tek bir arayüz oluşturabilir ben şaşırdım ObjectLiteralböyle:

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

Sonra böyle, kullanmak istiyorum:

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

İstediğiniz gibi bu tek bir arayüz defalarca yeniden kullanabilirsiniz.

İyi şanslar.

Cevap 20/05/2019 saat 11:56
kaynak kullanıcı

oy
0

Bir üzere typings eklemek çalışıyorsanız Bozunmamış bir işleve argümanlar, örneğin, hazır bilgi nesne, sözdizimi:

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

foo({ bar: true, baz: 'lorem ipsum' });
Cevap 07/03/2019 saat 01:22
kaynak kullanıcı

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