typescript - Başka bir fonksiyon döndüren bir fonksiyonun dönüş tipi nedir
Typescript kullanarak Protractor testleri geliştirmek üzerinde çalışıyorum. Görünüşe göre protractor için mevcut olan d.ts dosyası oldukça eski. Bunu, Protractor'un eklediği Beklenen Koşulları (Expected Conditions) içerecek şekilde güncellemeye çalışıyorum.
Özetlemek gerekirse, Beklenen Koşullar, protractor içinde, değerinizin sözünü veren bir fonksiyon döndüren bir fonksiyon kümesidir.
Kullanım örneği:
protractor.ExpectedCondtions.visibilityOf(element(by.id('button1')))();
Belirli bir dönüş türü döndürecek bir fonksiyon döndürdüğümü Protractor'a nasıl söyleyeceğim konusunda kafam karıştı. Bunu deneyen var mı?
Cevap #1
Eğer sizi doğru anladıysam, çözümünüz "ikinci" fonksiyonunun döndürdüğü tipe bağlı olacak.
Özetle, bunu yapmanın en az 2 yolu vardır:
- Lambda sözdizimi
- Arayüzler (normal ve genel arayüzler)
Tüm bunları aşağıdaki kodda açıklamaya çalıştım, lütfen kontrol edin:
module main
{
export class TestClass
{
// Use lamba syntax as an interface for a return function
protected returnSpecificFunctionWhichReturnsNumber(): () => number
{
return this.specificFunctionWhichReturnsNumber;
}
protected specificFunctionWhichReturnsNumber(): number
{
return 0;
}
// Use an interface to describe a return function
protected returnSpecificInterfaceFunction(): INumberFunction
{
return this.specificFunctionWhichReturnsNumber;
}
// Use a generic interface to describe a return function
protected returnSpecificGenericInterfaceFunction(): IReturnFunction<number>
{
return this.specificFunctionWhichReturnsNumber;
}
}
// An interface for a function, which returns a number
export interface INumberFunction
{
(): number;
}
// A generic interface for a function, which returns something
export interface IReturnFunction<ValueType>
{
(): ValueType;
}
}
Cevap #2
Bu soru, bir fonksiyon döndüren bir fonksiyon için return fonksiyonunun nasıl yazılacağı hakkında Google'da ilk çıktığı için, bu türleri tanımlamak için genel çözümü burada ekleyeceğim.
Yani bu kısmi uygulanmış add fonksiyonuna tip bildirimi eklemek istiyorsanız:
const add = (a : number) => (b: number) => a + b;
Sadece = işaretinden sonraki kısmı çoğaltır ve dönüş değerini karşılık gelen değer yaparsınız:
export const add: (a : number) => (b: number) => number =
(a : number) => (b: number) => a + b;
Ama bu noktada, aslında işlev için türlere ihtiyacınız yok, bu yüzden bunu sanki JS gibi yazabilirsiniz:
export const add: (a : number) => (b: number) => number =
a => b => a + b;
Bunu daha kapsamlı bir şekilde yazmak:
const add: (a : number) => (b: number) => number =
a => {
console.log(a);
return b => {
console.log(b);
return a + b;
}
};
function kullanarak:
function add(a: number): (b: number) => number {
return function(b) {
return a + b
}
}
Genel türlerle:
export const add: <A extends number, B extends number>(a : A) => (b: B) => number =
a => b => a + b;
veya function ile (B extends number, kullanımına bağlı olarak A extends number ile aynı yerde olabilir):
function add<A extends number>(a: A): <B extends number>(b: B) => number {
return function(b) {
return a + b
}
}
