【发布时间】:2015-09-08 04:38:06
【问题描述】:
假设我有这样的代码:
function defaultIt(s: MaybeString): string {
if (typeof s.content === "string") {
return s.content;
}
return "";
}
class MaybeString {
content: string|void;
}
如果我错了,请纠正我,但我相信这是你能得到的最安全的类型;任何适合MaybeString 的可能输入都将生成一个字符串。但是,TypeScript 给了我一个错误:Type 'string | void' is not assignable to type 'string'。
如何让 TypeScript 通过检查类型来识别我已经消除了歧义?
谢谢!
【问题讨论】:
-
诚然,我只使用 Typescript 几个月,但将
content键入为string|void是否有意义?这是“联合类型”对吗?所以你说的是content属性只有string和void之间共有的属性(因为void根本没有属性,string|void基本上是一样的如void)。您是想说content属性是可选的并且可能没有值吗? -
我想我误解了。我认为这有点像“也许”之类的东西。有没有办法说它可以是 either 字符串或 void?
-
我删除了我的答案 b/c 它是关于接口上的可选属性。但是如果类属性是可选的,你基本上不需要做任何特别的事情(关于打字稿声明)。这是你指出我的错误后我得出的结论,并得到this answer的支持。
-
我想我的问题更笼统,但我试图简化它。例如,如果我想将其设为字符串或函数怎么办?
标签: typescript