typescript - Bir arabirim kullanarak örnek oluşturma


Angular 2 TypeScript uygulamamda, isteğe bağlı parametrelere izin vermek için bir sınıf yerine bir arayüz tanımladım.

Bildiğim kadarıyla, bu arayüzü bir şekilde şu şekilde uygulamam gerekiyor:

export class myClass implements myInterface { ... }

ve sonra bunu new(...) ile örnekle.

Bunu (Angular 2'de) yapmanın doğru yolunun bu olup olmadığını merak ettim yoksa daha basit/daha iyi bir yol var mı?

Ayrıca, uygulamayı nereye koymalıyım, kullandığım bileşende (.ts), arayüzün olduğu yerde mi yoksa başka bir yerde mi?

Cevap #1

Bunu böyle yapabilirsiniz. Ayrıca, şöyle bir arayüzü uygulayan bir nesne de oluşturabilirsiniz:

interface foo {
    one: number;
    two: string;
}

const bar: foo = { one: 5, two: "hello" };

Bir sınıfı kullanmak istiyorsanız, onu istediğiniz yere koyabilirsiniz. Eğer bileşenle sıkı bir şekilde bağlıysa, onu oraya koyabilirsiniz. Ancak genellikle sınıfların gevşek bağlı olmasını isterim, bu yüzden onları kendi dosyalarına koyarım.

Cevap #2

Ben bu yolu kullanıyorum

interface IObject{
    first: number;
    second: string;
}

sonra

var myObject = {} as IObject
var myListObject = [] as Array<IObject>

Cevap #3

Kabul edilen cevap iyi olsa da, bu tür çözümlere dikkat edin çünkü bunlar, arayüzde tanımlanmış gerekli özellikleri atlamanıza izin verir:

const instance1 = {} as MyInterface;
const instance2 = <MyInterface>{};

Diğer bazı sağlam ve kompakt alternatifler şunları içerir:

1) Arayüzü uygulayan anonim bir sınıf oluşturun:

new class implements MyInterface {
  one = 'Hello';
  two = 'World';
}();

2) Alternatif olarak, aşağıdaki gibi bir yardımcı fonksiyon kullanın:

export function impl<I>(i: I) { return i; }

impl<MyInterface>({
  one: 'Hello';
  two: 'World';
})

Cevap #4

Aşağıdakileri yapabilirsiniz:

export interface IMyInterface {
  property1: string;
  property2: number;
  property3: boolean;
}

export class MyClass implements IMyInterface {
  property1: string = '';
  property2: number = 1;
  property3: boolean = false;
  constructor(){}
}

Sonra örneklemek için:

let newFromInterface = new MyClass();

En azından bunu kodumda böyle yapıyorum.

İlgili makaleler