几天前,我已经开始学习TS,当我在Internet上查找使用TS完成的快速服务器时,我发现这是Middlewares参数的类型定义,但我实际上并不理解。我尝试在Typescript文档中进行搜索,但没有找到与此类似的内容。
<!-- language: lang-ts -->
function initializeMiddlewares (middlewares: {
forEach: (arg0: (middleware: any) => void) => void
}): void {
middlewares.forEach(middlewares => {
this.app.use(middlewares);
})
}
如果我将其删除,而只是将“ any”设置为类型,则会得到以下代码和此错误
TS7006: Parameter 'middlewares' implicitly has an 'any' type.
<!-- language: lang-ts -->
function initializeMiddlewares(middlewares: any): void {
middlewares.forEach(middlewares => {
console.log(middlewares)
this.app.use(middlewares);
})
}
这个类型定义说这initializeMiddlewares
是一个函数,该函数标记middlewares
返回的参数()void
,并且middlewares
具有forEach
方法。该forEach
方法是一个标记参数(arg0
)的函数,该函数是另一个带有any
(middleware
)的函数;内部函数返回void,外部函数也返回void。
更改内容时,您的错误可能会令人困惑,因为名称middlewares
已被遮盖;指的是内部名称forEach
。如果要使用隐式any,则需要更改tsconfig.json
:"noImplicitAny": false
。
一点一点地分解可以帮助理解复杂的类型:
function initializeMiddlewares (
// middlewares argument
middlewares: {
// forEach method which should exist on the middlewares argument
forEach:
// inner function
arg0: (middleware: any) => void)
// forEach return
=> void,
}
// initializeMiddlewares return
): void
{
middlewares.forEach(middlewares => {
this.app.use(middlewares);
})
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句