TypeScript模式与字符串或Blob匹配(类型union = string | Blob)

时间:2018-12-19 20:33:00

标签: typescript types

我已经定义了联合类型,

type TextData = string
type BinaryData = Blob
type DataType = TextData | BinaryData

我想在函数中使用

function doSomethingWithData(data: DataType): void {
    if (data instanceof TextData)
      // doesn't work (type being used as a value error)

    if (typeof data === 'Blob')
      // doesn't work (typeof data === 'object')

    if (data instanceof Blob)
      // works, but I don't want to use a type alias
}

反正有办法使它起作用吗?还是我需要重新考虑设计?

1 个答案:

答案 0 :(得分:1)

  

我知道为什么它不起作用,类型别名在编译后就被编译掉了。但是还有另一种方法吗?

您必须使用运行时可用变量进行运行时检查。

暴露给运行时

您可以将BinaryData导出为运行时变量

type TextData = string
type BinaryData = Blob
const BinaryData = Blob;
type DataType = TextData | BinaryData

function doSomethingWithData(data: DataType): void {
    if (data instanceof BinaryData) {
      // works
    }
}