接口x任何

时间:2017-10-11 01:26:57

标签: typescript angularfire2 google-cloud-firestore

使用'任何'是否有任何缺点?而不是像这样的情况下的接口?

首先使用Item的接口:

imports ...
export interface Item { name: string; }

@Component({
  selector: 'app-root',
  template: `
  my template
  `
})
export class AppComponent {
  private itemsCollection: AngularFirestoreCollection<Item>;
  items: Observable<Item[]>;
  constructor(private afs: AngularFirestore) {
    this.itemsCollection = afs.collection<Item>('items');
    this.items = this.itemsCollection.valueChanges();
  }
}

没有界面,使用&#39;任何&#39;

imports...

@Component({
  selector: 'app-root',
  template: `
     my template
  `
})
export class AppComponent {
  private itemsCollection: AngularFirestoreCollection<any>;
  items: Observable<Any[]>;
  constructor(private afs: AngularFirestore) {
    this.itemsCollection = afs.collection<any>('items');
    this.items = this.itemsCollection.valueChanges();
  }
}

谢谢

1 个答案:

答案 0 :(得分:0)

在这种情况下使用any是一种不好的做法。基本上,你扔掉了TypeScript(which is type system)最重要的部分之一,以及它的好处(编译时类型检查)。除非必要,否则这样做。

我建议仅在两种情况下使用any

  • 当你真正处理不可预测类型的对象时。即便如此,您可能希望首先声明interface类型来声明合同(在运行时可能会或可能不会实现)。

  • 当您使用&#34; ambient declarations&#34;对于没有相应@types/* npm模块的JavaScript库。这真的是最后的手段。好消息是,环境声明现在越来越少。