Tom*_*mas 9 javascript typescript
我们正在使用简单的函数声明,其中函数采用单个对象或某种类型的对象数组.
简单的声明是:
interface ISomeInterface {
name: string;
}
class SomeClass {
public names: ISomeInterface[] = [];
public addNames(names: ISomeInterface | ISomeInterface[]): void {
names = (!Array.isArray(names)) ? [names] : names;
this.names = this.names.concat(names);
}
}
Run Code Online (Sandbox Code Playgroud)
但TypeScript抛出"type is not assignable"错误.
这样做有更好的方法吗?显然我们可以有两个独立的功能,但我认为以这种方式处理单个vs多个是很好的.
isv*_*all 12
你可以更容易
addNames(names: ISomeInterface | ISomeInterface[]): void {
this.names = this.names.concat(names);
}
Run Code Online (Sandbox Code Playgroud)
来自MDN
concat()方法返回一个新数组,该数组由调用它的数组组成,并与作为参数提供的数组和/或值连接.
Sil*_*ind 10
您还可以使用rest参数:
interface ISomeInterface {
name: string;
}
class SomeClass {
public names: ISomeInterface[] = []; // create an instance if applicable.
addNames(...names: ISomeInterface[]): void {
// the names argument will always be an array
this.names = this.names.concat(names);
}
}
Run Code Online (Sandbox Code Playgroud)
你可以这样称呼它:
addNames(name1); // just pass one
addNames(name1, name2, name3); // pass more comma separated
addNames(...[name1, name2, name3]); // pass an array.
Run Code Online (Sandbox Code Playgroud)
请注意我删除了function关键字,因为否则thisbody块中的关键字可能会失去范围,具体取决于谁调用它.
我想这就是你想要的
interface ISomeInterface {
name: string;
}
class SomeClass {
public names: ISomeInterface[];
addNames(names: ISomeInterface | ISomeInterface[]): void {
names = (names instanceof Array) ? names : [names];
this.names = this.names.concat(<ISomeInterface[]>names)
}
}
Run Code Online (Sandbox Code Playgroud)
你想使用instanceOf,而不是 isArray 。
| 归档时间: |
|
| 查看次数: |
9808 次 |
| 最近记录: |