我还需要在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游乐场