我正在努力找出解决这个问题的最佳方法。我正在将一个库转换成打字稿,并且遇到了一个我之前遇到的特定问题。有一个函数谁的定义看起来有点像这样
public execute(path: string | string[]): Promise<Object> {
if (typeof path == "string") {
// Turn the string into an array
}
}
问题是我无法将path参数转换为数组,因为它的类型为(string | string[])
。尝试这样做也失败了。
public execute(path: string | string[]): Promise<Object> {
newPath: string[];
if (typeof path == "string") {
newPath = [path];
} else {
newPath = path;
}
}
由于路径属于(string | string[])
类型,因此无法指定为string[]
类型。任何解决方案?
答案 0 :(得分:0)
我其实只是想通了。如果您使用在类型转换中构建的Typescripts,那么这是非常简单的解决方案。
public execute(path: string | string[]): Promise<Object> {
if (typeof path == "string") {
path = <string[]>[path];
}
}
繁荣!没有错误
答案 1 :(得分:0)
您实际上可以在不使用类型断言(强制转换)的情况下执行此操作,使用type guards:
public execute(path: string | string[]): Promise<Object> {
let newPath: string[];
if (typeof path === "string") {
newPath = [path];
} else {
newPath = path;
}
}
在此示例中,TypeScript将path
的类型从string | string[]
缩小到if块内的string
,因此您不需要类型断言。