( typescript )自动访问子对象属性

xxb16uws  于 2023-01-31  发布在  TypeScript
关注(0)|答案(2)|浏览(125)

我刚接触TS,有一个问题:
假设我有以下内容:

interface FolderInterface {
   name: string;
   source: {
     type: 'usb'
   },
   // many more properties
}

class FolderImpl {
   folder: FolderInterface
}

我有一个名为 *folderImpl * 的 *FolderImpl * 示例。
我想做的是,如果调用 folderImpl.name,它会自动调用 folderImpl.folder.name
我猜一种方法是复制属性,但有比这更好的方法吗?
谢谢你的帮助。

oxiaedzo

oxiaedzo1#

在Typescript中,implements子句可用于验证类是否符合特定接口
这不是你正在做的,如果你的类FolderImpl有一个FolderInterface类型的属性,它不需要实现任何其他的类。

class FolderImpl {
   constructor(
    public folder: FolderInterface, public otherProp: string
   ) {
    this.folder = folder;
    this.otherProp = otherProp;
  }
}

是否有一种方法可以自动将所有内容Map到文件夹上的相应字段
如果你想声明一个类型为FolderImpl的常量,你不需要Map任何东西,你可以这样做:

const test : FolderImpl =  new FolderImpl({name: 'zab', source: { type : 'usb'}},'ahmed');

你可以这样访问你的属性:

const myFolder = test.folder
js4nwp54

js4nwp542#

看起来你想要的东西也可以简单地通过继承来实现,继承是javascript的本机属性。你可以创建一个“父”类,其属性可以在它的所有“子”类之间共享。
您的父类:

class Folder {
  name: string;
  source: {
    type: 'usb'
  };
  
  constructor(name: string) {
    this.name = name;
  }
}

现在将这个类扩展到实现的“子”类:

class FolderImp extends Folder {
  constructor(name: string) {
    super(name);
  }
  
  // add methods that would be specific to the FolderImp class
  // you can access all the properties of the parent class
  printName() {
    console.log(this.name);
  }
}

注意super调用,它允许你设置父类的属性,而不用在子类中声明它们。

const folderImp = new FolderImp("bin");
folderImp.printName() // prints bin

相关问题