首页 > 解决方案 > TypeScript - 使用“as”运算符转换后破坏数组导致编译错误:预期表达式

问题描述

我正在使用 TypeScript 2.9.2。

第 3 方库URI.js具有声明为的静态方法:

joinPaths(...paths: (string | URI)[]): URI;

现在我有一个名为urlPaths声明为的变量urlPaths: string | string[],以下代码[ts] Expression expected.在展开运算符处给了我错误:

URI.joinPaths(typeof urlPaths === 'string' ? urlPaths as string : ...(urlPaths as string[]))

但是,如果我将三元运算符表达式提取为单独的变量,那就没问题了:

const paths = typeof urlPaths === 'string' ? [urlPaths as string] : urlPaths as string[];
URI.joinPaths(...paths);

我的语法有什么问题?

标签: typescript

解决方案


函数的参数支持扩展语法,因此您...应该位于最外层:

URI.joinPaths(... (typeof urlPaths === 'string' ? [urlPaths as string] : (urlPaths as string[])));

但也要注意断言是多余的,打字稿会找出没有它们的类型,因为typeof urlPaths === 'string'它是类型保护和urlPaths: string | string[]

URI.joinPaths(... (typeof urlPaths === 'string' ? [urlPaths] : urlPaths));

推荐阅读