【发布时间】:2021-08-06 22:46:42
【问题描述】:
我试图在构造函数中有一个可选参数,其类型被推断为属性的类型。不幸的是,当参数没有传递时,Typescript 会判断类型是“未知”,而不是推断类型是“未定义”:
class Example<Inner> {
inner: Inner;
constructor(inner?: Inner) {
if (inner) {
this.inner = inner;
}
}
}
const a = new Example('foo'); // const a: Example<string>
const b = new Example(); // const b: Example<unknown>
有没有办法解决这个问题而不必指定泛型类型或参数?
我尝试使用默认值:constructor(inner: Inner = undefined) {,但随后出现错误:
类型“未定义”不能分配给类型“内部”。 'Inner' 可以用与 'undefined'.ts(2322) 无关的任意类型实例化`
【问题讨论】:
-
试试
class Example<Inner = undefined> { inner?: Inner; ...? -
是的,解决了!想把它写成答案吗?
-
顺便说一句,我建议不要有条件地初始化该属性。相反,将其声明为
inner: Inner | undefined;而只是this.inner = inner; -
我也喜欢这样,但它不起作用。在这种情况下,
inner的类型为undefined,但Inner不会被推断为undefined。
标签: javascript typescript