javascript - Typescript Çift Fonksiyon Uygulaması


Aynı Typescript sınıfında aşağıdaki iki fonksiyon imzasını tanımladım, yani,

public emit<T1>(event: string, arg1: T1): void {}

ve

public emit<T1,T2>(event: string, arg1: T1, arg2: T2): void {}

Ancak TypeScript'i derlerken aşağıdaki hatayı alıyorum

error TS2393: Duplicate function implementation.

Parametre sayılarının farklı olduğu durumlarda TypeScript'te fonksiyonları aşırı yükleyebileceğinizi düşünmüştüm. Yukarıdaki imzaların sırasıyla 2 ve 3 parametreye sahip olduğunu göz önünde bulundurarak, neden bu derleme hatasını alıyorum?

Cevap #1

Kodunuzun bu şekilde olduğunu varsayıyorum:

public emit<T1>(event: string, arg1: T1): void {}
public emit<T1,T2>(event: string, arg1: T1, arg2: T2): void {}
public emit(event: string, ...args: any[]): void {
    // actual implementation here
}

Sorun, ilk 2 satırdan sonra {} olmasıdır. Bu aslında bir işlevin boş bir uygulamasını tanımlar, yani şöyle bir şeydir:

function empty() {}

Fonksiyon için yalnızca bir tip tanımlamak istiyorsunuz, bir uygulama değil. Bu nedenle boş blokları sadece bir noktalı virgül ile değiştirin:

public emit<T1>(event: string, arg1: T1): void;
public emit<T1,T2>(event: string, arg1: T1, arg2: T2): void;
public emit(event: string, ...args: any[]): void {
    // actual implementation here
}

Cevap #2

Çünkü IDE içinde hem Typescript hem de JavaScript dosyasını aynı pencerede açıyorsunuz, bu problemi üç şekilde çözebilirsiniz:

İlk Çözüm:

Sadece TypeScript dosyasını veya sadece JavaScript dosyasını aç

İkinci çözüm - bu komutu çalıştırın:

tsc --init

Bu komut, TypeScript yapılandırması için tsconfig.json dosyasını oluşturacaktır

Son Çözüm yaz

export{}

Dosyanın üstünde

Cevap #3

export {}

Bu satırı typescript dosyasının en üstüne ekleyin

İlgili makaleler