如何获得从类实例中克隆的对象的类型?

问题描述 投票:0回答:1

假设我有这个示例类,但实际上它具有更多的属性

class Foo {
  name: string
  dob: number

  constructor(name: string, dob: number) {
    this.name = name;
    this.dob = dob;
  }

  get age() {
     return new Date().getTime() - this.dob
  }
}

现在Typescript很聪明,当我实例化该类时,它将为我提供所有正确的属性:

var classInstance = new Foo('name', new Date().getTime())

classInstance.name // ok
classInstance.dob // ok
classInstance.age // ok

在我的代码中某处使用Spread运算符克隆了该类,我不确定TS在幕后做什么,但它确实很聪明,并为我提供了所有正确的属性

var classJSON = {...classInstance};

classJSON.name // ok
classJSON.dob // ok
classJSON.age // missing

tsplayground

这很棒,但是我有时需要使用classJSON的类型。我想提取它的唯一方法是这样做:

var classJSON  = {...new Foo('', 0)}
type ClassJSONType = typeof classJSON; 

是否有一种方法可以直接从Foo中提取类型而无需实例化Java语言?

typescript typescript3.0
1个回答
1
投票

目前无法实现,因为TS类型系统不允许跟踪非自有属性。正是您想要的proposalThis comment还描述了表达Spread运算符而不剥离非自有属性的可能方法。

© www.soinside.com 2019 - 2024. All rights reserved.