Typescript'te, mevcut bir nesneden "type" tanımlamak mümkün mü?
Diyelim ki, benim böyle bir fonksiyonum var:
function plus(a: number, b: number) { return a + b }
Elbette, türü Typescript'te bir fonksiyon olarak (a: number, b: number) => number.
Eğer bu fonksiyonu türünü gerçekten belirtmeden başka bir fonksiyon için bir "argüman" olarak kullanmak istersem, varsayılan argüman hilesini kullanabilirdim:
function wrap(fn = plus) { ... }
Eğer bunun varsayılan argüman olmasını istemiyorsam, tipini açıkça belirtmenin dışında başka bir seçeneğim var mı?
Kısacası, bu function wrap(fn: (a: number, b: number) => number) { ... } istemiyorum, ama şöyle bir şey istiyorum function wrap(fn: like(plus)) { ... }.
Cevap #1
@OweR ReLoaDeD sayesinde, type fn=typeof plus geçerli bir ifade, bu yüzden bu çalışır:
function plus(a: number, b: number) { return a + b }
function wrap(fn: typeof plus) { }
Cevap #2
Generik kullanımı hakkında ne düşünüyorsunuz:
function plus(a: number, b: number) { return a + b }
function wrap<T extends Function>(fn: T) {
fn();
}
// Works
var wrappedPlus = wrap<typeof plus>(plus);
// Error: Argument of type '5' is not assignable to parameter of type '(a: number, b: number) => number'.
var wrappedPlus = wrap<typeof plus>(5);
// Error: Argument of type '5' is not assignable to parameter of type 'Function'.
var wrappedPlus = wrap(5);
function concat(a: string, b: string) { return a + b }
// Error: Argument of type '(a: number, b: number) => number' is not assignable to parameter of type '(a: string, b: string) => string'.
var wrappedPlus = wrap<typeof concat>(plus);
