我在使用联合参数时遇到了一些麻烦。想象一下我有这样一个功能:
interface IColumnDefinition {
id: string;
title: string;
}
addColumn(definition: string|IColumnDefinition) {
if (typeof (definition) === "string") {
definition = { id: definition, title: definition };
}
var column = new JSColumn(definition);
...
}
我希望用户要么传递一个定义新列的完整对象,要么只传递一个string
,在这种情况下我创建一个默认对象。
然而,TypeScript 有两个问题:
definition = { id: definition };
是不允许的,因为 TypeScript 认为这definition
可能不是一个字符串——这是错误的,因为我在typeof
上面做了一行。new JSColumn(definition)
不可能,因为构造函数需要一个IColumnDefinition
对象,也definition
可能是一个字符串——这也是错误的,因为if
上面确保它始终是一个正确的对象。
我能做些什么来让 TypeScript 相信这些不是错误?有没有像演员表一样的东西,上面写着“嘿,这个变量是类型xyz
。相信我,我知道我在做什么。”
我目前将参数定义为any
,这不是一个真正的选择,因为我失去了类型检查的全部优势。