簡體   English   中英

推斷 function 鏈中的參數類型

[英]Infer parameter types in function chain

我正在嘗試制作一個自制的 function 映射鏈。 問題是,我想確保輸入在映射鏈中保持一致。 我的問題是我不知道如何寫f(x:T) => U

對於我正在嘗試做的一個適當的例子:

function myChainer<T>(args:T){
    return {
       map:(innerFuction:(payload: T) => unknown){
           return myChainer(innerFuction(args))
       }
    }
}

現在,如果我跑

myChainer(0)
.map((args1) => {
    return doSomething(args1) ? "a" : "b"
})
.map((args2) => {
    return doSomething2(args2) ? true : false
})

第一個map會知道args1的類型是Number但第二個不會知道args2的類型是string 而且,正如預期的那樣,后續的鏈接函數不會知道它們各自的 arguments 的類型。 應該用什么來替換unknown ,以便每個鏈接的 function 根據先前鏈接的 function 的返回類型找出其 arguments 的類型?

您需要使用泛型類型參數來引用innerFunction的返回類型,以便在遞歸引用myChainer時可以將該類型提供給 TS。

這就是它的樣子:

function myChainer<T>(args:T){
    return {
       map<U>(innerFuction:(payload: T) => U) {
           return myChainer<U>(innerFuction(args))
       }
    }
}

在這里你有:


function myChainer<T>(args: T) {
    return {
        map: <R,>(innerFuction: (payload: T) => R) => {
            return myChainer(innerFuction(args))
        }
    }
}

const foo = (arg: number) => arg.toString()
const bar = (arg: string) => Promise.resolve(parseInt(arg, 10))
const baz = (arg: Promise<number>) => arg


const result = myChainer(0)
    .map(arg => foo(arg)) // arg -> number
    .map(arg => bar(arg)) // arg -> string
    .map(arg => baz(arg)) // arg -> Promise<number>
    .map(arg => foo(arg)) // expected error

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM