接口 x 任何
Interfaces x any
在这种情况下使用 'any' 而不是接口有什么缺点吗?
首先使用 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();
}
}
没有界面,有'any'
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();
}
}
谢谢
在这种情况下使用 any
是一种不好的做法。基本上,您将丢弃 TypeScript 最重要的部分之一 (which is type system) 及其优势(编译时类型检查)。除非必要,否则不要 这样做。
我建议仅在两种情况下使用 any
:
当你真正处理不可预测类型的对象时。即便如此,您可能还是希望首先声明一个 interface
类型来声明一个合同(在运行时可能会或可能不会履行)。
当您对 JavaScript 没有相应 @types/*
npm 模块的库使用“ambient declarations”时。这真是不得已而为之。好消息,如今环境声明越来越少了。
在这种情况下使用 'any' 而不是接口有什么缺点吗?
首先使用 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();
}
}
没有界面,有'any'
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();
}
}
谢谢
在这种情况下使用 any
是一种不好的做法。基本上,您将丢弃 TypeScript 最重要的部分之一 (which is type system) 及其优势(编译时类型检查)。除非必要,否则不要 这样做。
我建议仅在两种情况下使用 any
:
当你真正处理不可预测类型的对象时。即便如此,您可能还是希望首先声明一个
interface
类型来声明一个合同(在运行时可能会或可能不会履行)。当您对 JavaScript 没有相应
@types/*
npm 模块的库使用“ambient declarations”时。这真是不得已而为之。好消息,如今环境声明越来越少了。