Type to represent multiple possible values
How about this?


Use constructor(private _options: any[]) instead of field declaration and assignment.
As a defensive programming measure use = [] to initialize the array with an empty value in null/undefined was padded in.
Instead of numerous searches through chosenIndices (via indexOf) use a simple .map(...) function instead.




export class SelectableModifier {

  constructor(private _numSelectionsNeeded: number, private _options: any[] = [], private _selectionTime: string) { }

  get numSelectionsNeeded(): number {
    return this._numSelectionsNeeded;
  }

  get options(): any[] {
    return this._options;
  }

  get selectionTime(): string {
    return this._selectionTime;
  }

  public makeSelection(chosenIndices: number[]): any[] {
    if (chosenIndices.length != this.numSelectionsNeeded) {
      throw new Error("The selection requires that " + this._numSelectionsNeeded + " selections be made but " + chosenIndices.length + " were instead.");
    }

    return chosenIndices.map(indexOfChosen =&gt; this.options[indexOfChosen]);
  }
}




UPD1

If null/undefined choices should be treated as errors, you can check for their presence and throw.

public makeSelection(chosenIndices: number[]): any[] {
    if (chosenIndices.length != this.numSelectionsNeeded) {
        throw new Error(`The selection requires that ${this._numSelectionsNeeded} selections be made but ${chosenIndices.length} were instead.`);
    }

    const result = chosenIndices.map(indexOfChosen =&gt; this.options[indexOfChosen]);
    if (result.some(item =&gt; item == null))
        throw new Error('Selection can not be null/undefined.');
    return result;
}