[英]Typescript return type of function from parameter
我想知道如何在打字稿中執行以下操作:
如果我有這個功能:
function getQueries(query) {
return Object.keys(query).reduce((list, key) => {
return { ...list, [key]: query[key].length > 3 }
}, {})
}
我想傳遞這樣的對象
getQueries({ first: 'dsds', second: 'dsdsds', third: 'ds' })
並且我想鍵入該函數以返回與我傳遞的完全相同的結構,但使用布爾值作為值。
const queries = getQueries({ first: 'dsds', second: 'dsdsds', third: 'ds' })
queries.first // ts error -> Property 'first' does not exist on type '{}'
我該如何處理這種打字?
您正在尋找泛型和映射類型:
function getQueries<T>(query: T): {[key in keyof T]: boolean} {
}
我的答案將更多針對您的具體情況,我需要稍微重構當前代碼以實現類型正確性。 考慮空閑代碼:
type BoolRecord<T extends Record<string, string>> = Record<keyof T, boolean>
function getQueries<Q extends Record<string, string>>(query: Q): BoolRecord<Q> {
return Object.keys(query).reduce((list, key) => {
return { ...list, [key]: query[key as keyof Q].length > 3 }
}, {} as BoolRecord<Q>)
}
const result = getQueries({ first: 'dsds', second: 'dsdsds', third: 'ds' });
// Record<"first" | "second" | "third", boolean>
我的假設是函數getQueries
需要作為帶有字符串值的參數對象獲取,因為您在內部使用的是length
屬性(實現檢查.length>3
)。 所以函數參數類型是Record<string, string>
。 下一步是定義返回類型,這是由BoolRecord
完成的,該類型采用原始 Record 並根據需要創建相同但帶有 bool 字段的字段。
我使用了Record實用程序類型,但這也可以通過映射類型來實現(Record 實際上是映射類型)。
有趣的部分是BoolRecord
它的定義說,對於任何 Record 給我 Record 使用相同的鍵(由keyof T
完成),並以 bool 作為值類型。
我想知道如何在打字稿中進行以下操作:
如果我有此功能:
function getQueries(query) {
return Object.keys(query).reduce((list, key) => {
return { ...list, [key]: query[key].length > 3 }
}, {})
}
我想在其中傳遞這樣的對象
getQueries({ first: 'dsds', second: 'dsdsds', third: 'ds' })
而且我想輸入該函數的類型以返回與我傳遞的結構完全相同的結構,但是將布爾值作為返回值。
const queries = getQueries({ first: 'dsds', second: 'dsdsds', third: 'ds' })
queries.first // ts error -> Property 'first' does not exist on type '{}'
我該如何進行這種打字?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.