Javascript 如何从构造函数中的可选参数推断泛型类型
我试图在构造函数中有一个可选参数,其类型被推断为属性的类型。不幸的是,当未传递参数时,Typescript会确定类型为“未知”,而不是推断类型为“未定义”:Javascript 如何从构造函数中的可选参数推断泛型类型,javascript,typescript,Javascript,Typescript,我试图在构造函数中有一个可选参数,其类型被推断为属性的类型。不幸的是,当未传递参数时,Typescript会确定类型为“未知”,而不是推断类型为“未定义”: 类示例{ 内:内; 构造函数(内部?:内部){ 如果(内部){ this.inner=内部; } } } 常量a=新示例('foo');//康斯特a:举个例子 常量b=新示例();//常数b:例如 有没有一种不用指定泛型类型或参数的方法可以解决这个问题 我尝试改用默认值:构造函数(内部:内部=未定义){,但随后出现错误: 类型“未定义”不
类示例{
内:内;
构造函数(内部?:内部){
如果(内部){
this.inner=内部;
}
}
}
常量a=新示例('foo');//康斯特a:举个例子
常量b=新示例();//常数b:例如
有没有一种不用指定泛型类型或参数的方法可以解决这个问题
我尝试改用默认值:构造函数(内部:内部=未定义){
,但随后出现错误:
类型“未定义”不可分配给类型“内部”。
“内部”可以用与“未定义”无关的任意类型实例化。ts(2322)`
将
=undefined
添加到泛型类型修复了该问题:
class Example<Inner = undefined> {
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<undefined>
类示例{
内:内;
构造函数(内部?:内部){
如果(内部){
this.inner=内部;
}
}
}
常数a=新示例('foo');//常数a:示例
常量b=新示例();//常量b:示例
感谢您的建议:
尝试类示例{inner?:inner
尝试
类示例{internal?:inner;…
?是的,这就解决了!想把它写下来作为一个答案吗?顺便说一句,我建议不要有条件地初始化该属性。相反,将它声明为inner:inner |未定义;
并且只this.inner=inner;
我也希望这样,但它不起作用。在这种情况下inner
的类型为未定义
但是内部
不会被推断为未定义
。
class Example<Inner = undefined> {
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<undefined>