特定类型与接口 [键:字符串]:任何在 TypeScript 中不兼容



我不知道为什么MyParamscloudFunctions数组中的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需要它时,因为blablaParams中是可选的。

如果适合,您也可以将其设置为您的类型中的可选。

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.

但在需要myFunctionblabla的情况下,此类回调应该会失败。

cloudFunctions[0][1]({ params: { blabla: 'string' } }); // right usage

此问题会导致错误。

相关内容

最新更新