如何将未知变量缩小为常规记录类型



我还需要在if条件中放入什么,以便TS接受函数调用的参数类型?当前条件不够具体,导致以下错误。

declare const unknownVar: unknown
declare function foo(record: Record<string | number, unknown>): void
if (unknownVar && typeof unknownVar === 'object')
foo(unknownVar) // error
Argument of type 'object' is not assignable to parameter of type 'Record<string | number, unknown>'.
Index signature for type 'string' is missing in type '{}'.

实现这一点的一种方法是使用类型谓词。

declare const unknownVar: unknown
declare function foo(record: Record<string | number, unknown>): void
function isObject(input: unknown): input is Record<string | number, unknown> { 
return typeof input === 'object'
}
if (isObject(unknownVar))
foo(unknownVar) // no error!

TS游乐场

最新更新