在Typescript中接受字符串和字符串数组作为参数

时间:2016-03-30 15:41:59

标签: arrays string typescript

我正在努力找出解决这个问题的最佳方法。我正在将一个库转换成打字稿,并且遇到了一个我之前遇到的特定问题。有一个函数谁的定义看起来有点像这样

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[]类型。任何解决方案?

2 个答案:

答案 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,因此您不需要类型断言。