Javascript 如何从构造函数中的可选参数推断泛型类型

Javascript 如何从构造函数中的可选参数推断泛型类型,javascript,typescript,Javascript,Typescript,我试图在构造函数中有一个可选参数,其类型被推断为属性的类型。不幸的是,当未传递参数时,Typescript会确定类型为“未知”,而不是推断类型为“未定义”: 类示例{ 内:内; 构造函数(内部?:内部){ 如果(内部){ this.inner=内部; } } } 常量a=新示例('foo');//康斯特a:举个例子 常量b=新示例();//常数b:例如 有没有一种不用指定泛型类型或参数的方法可以解决这个问题 我尝试改用默认值:构造函数(内部:内部=未定义){,但随后出现错误: 类型“未定义”不

我试图在构造函数中有一个可选参数,其类型被推断为属性的类型。不幸的是,当未传递参数时,Typescript会确定类型为“未知”,而不是推断类型为“未定义”:

类示例{
内:内;
构造函数(内部?:内部){
如果(内部){
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>