我不知道为什么MyParams
与cloudFunctions
数组中的Params
不兼容。TS 说:"属性 'blabla' 在类型'参数'中缺失,但在类型'MyParams'中是必需的。
// Basic declarations
interface Params {
[key: string]: any
}
interface RequestFunction<T extends Params = Params> {
params: T
}
// My function
type MyParams = {
blabla: string
}
const myFunction = async (request: RequestFunction<MyParams>) => { }
// Export everything
const cloudFunctions: [string, (request: RequestFunction) => any][] = [
['my-function', myFunction],
]
游乐场链接
确切地说。
request: RequestFunction
不保证blabla
,当myFunction
需要它时,因为blabla
在Params
中是可选的。
如果适合,您也可以将其设置为您的类型中的可选。
type MyParams = {
blabla?: string
}
如果需要blabla
,则需要在cloudFunctions
签名中指定该签名,添加any
或所有类型。
const cloudFunctions: Array<[string, (request: RequestFunction<any>) => any]> = [
['my-function', myFunction],
]
问题的根源是string, (request: RequestFunction) => any
。这意味着第二个参数可以在没有blabla
的情况下使用。
cloudFunctions[0][1]({ params: {} }); // works.
但在需要myFunction
blabla
的情况下,此类回调应该会失败。
cloudFunctions[0][1]({ params: { blabla: 'string' } }); // right usage
此问题会导致错误。