Daktilo Metod, parametre dizileri, Boolean veya sayıların türü dizi olabilir. Ben herhangi bir [] olarak beyan etmek zorunda da bu üç türden olduğu gibi giriş türünü sınırlamak için bir yol yoktur musunuz?
Ben Yerine daktilo herhangi Tipi Birçok Türleri biri olarak Parametre Tipi belirtin miyim?
Typescript 1.4 tanıtıldı Birliği Türleri cevabı şimdi yani evet, yapabilirsin .
function myFunc(param: string[] | boolean[] | number[]): void;
Bir derleme hatası tetikleyecektir belirtilenler dışında türünün kullanılması.
Birden belirli türleri bir dizi istiyorsanız, bunun için de Birlik Türleri kullanabilirsiniz:
function myFunc(param: (string|boolean|number)[]): void;
Bu OP istedi olduğundan farklı olduğunu unutmayın. Bu iki örnek farklı anlamları vardır.
Bu biraz eski soru gibi görünüyor, ama yine de, ben karşıya geldi ve ben getirmek bu diğer cevabını cevapsız.
Typescript 1.4 itibaren böyle bir işlev parametresi için birden çok olası türlerini bildirmek mümkün olduğunu görünüyor:
class UtilsClass {
selectDom(element: string | HTMLElement):Array<HTMLElement> {
//Here will come the "magic-logic"
}
}
Bunun nedeni "birlik-türleri" yeni typescript kavramının olduğunu.
Daha görebilirsiniz burada .
Hayır typescript sadece tek opsiyonel örneğin bir parametrede TypeAnnotation destekler x: stringizin verilen türleri bir dizi devlet olamaz, böylece, sayı veya herhangi.
Bununla birlikte, typescript fonksiyonu aşırı yük (belgeler p51) destekler:
Fonksiyon aşırı yükler bir imza ile mümkün olandan işlevi tarafından desteklenen çağırma desen daha doğru bir şekilde belirlenmesine izin vermek. [...]
function attr(name: string): string; function attr(name: string, value: string): Accessor; function attr(map: any): Accessor; function attr(nameOrMap: any, value: string): any { if (nameOrMap && typeof nameOrMap === "object") { // handle map case } else { // handle string case } }
Kullanabileceğiniz otherwsie typeoftip kontrolleri, ancak bu türü ascpect sayaçları Tipi Komut biraz.
function myFunc(x){
if(typeof x !== "string" && typeof x !== "object" && typeof x !== "number")
throw new TypeError("Unsupported type!");
}
Bunu yapmak için fonksiyon aşırı yüklenmeleri kullanabilirsiniz:
class Thing {
public foo(x: number[]);
public foo(x: bool[]);
public foo(x: string[]);
public foo(x: any[]) {
// Note: You'll have to do type checking on 'x' manually
// here if you want differing behavior based on type
}
}
// Later...
var t = new Thing();
t.foo(someArray); // Note: External callers will not see the any[] signature
Bu sorunu çözmek için başka bir yol, giriş türleri arasında genel yöntem ve özelliklerini bulmak ve bu ortak metodlarını ve özelliklerini korur yöntem bildiriminde bir in-line tipi bildirmektir. Bunun gibi:
methodName(param1: { prop1: number; prop2: string; }, param2: { propA: bool; propB: string; } ): methodResultType;
dizeleri, boolean ve sayılar ilkel türleri şunlardır beri basit bir yolu yoktur sanmıyorum. Farklı nesne türlerinin bir kümesi kullanmak istiyorsanız, bunu belki bir süper sınıfın ile gelip ve ardından yöntemin arayüzünde süper sınıfını belirtebilirsiniz. Öte yandan, aynı zamanda dizeleri, Boolean ve tamsayılar diziler için farklı uygulamaları belirtmek için yöntem aşırı yüklenmesini kullanabilirsiniz.













