TheSniper105 Ответов: 1

Использование инициализатора в typescript


привет у меня урок

export class Options {

    //main properties

    valueField: any;
    labelField:any;
    sortField: string[];
    searchFields: string[];
    items: any[];
    currentResults: any[];
    delimiter: string;
    mode: SelectizeMode;
    selected: any;
    placholder: string;

    get hasOptions(): Boolean {
        return this.items ?  this.items.length > 0 : false;
    }


    constructor(_valueField?: string, _labelField?: string,
        _searchFields?: string[], _items?: any[], _currentResults?: any[],
        _selecetd?: any, _delimiter?: string, _sortField?: string[], _mode?: SelectizeMode, _placholder?: string) {


        this.valueField = _valueField;
        this.labelField = _labelField;
        this.sortField = _sortField || [this.valueField];
        this.searchFields = _searchFields || [this.labelField, this.valueField];
        this.items = _items;
        this.delimiter = _delimiter || ',';
        this.mode = _mode || SelectizeMode.single;
        this.selected = _selecetd;
        this.currentResults = _currentResults || [];
        this.placholder = _placholder || 'select...';
    }
}


я хочу создать объект этого класса без необходимости передавать все необязательные параметры

как с#

например мне это нравится

Options x =     Options(){
delimiter:','
}


Что я уже пробовал:

я сделал все параметры конструктора необязательными

создать интерфейс вместо класса это сработало но породило еще одну проблему что мне нужны новые экземпляры поэтому мне пришлось сделать его классом так как не могу взять экземпляр интерфейса

1 Ответов

Рейтинг:
7

Pascal Ganaye

Нет простого способа сделать именно то, что вы хотите.
Однако есть альтернатива, которая может соответствовать вашим потребностям.

Вместо того чтобы создавать класс, вы создаете интерфейс со всеми необязательными членами.

export interface IOptions { 
 	valueField?: string; 
	labelField?: string;
	searchFields?: string[];
	...
}

Тогда создание экземпляра может быть выполнено из простого объектного литерала.
var options : IOptions =  {
	valueField: "aa",
	labelField: "bb"
};

Он также работает в методах:
var x = new class1({ valueField:"AA"});

class class1 {
 	valueField: string; 
	labelField: string;
  
	constructor(options: IOptions){
		this.valueField = options.valueField || "empty";	  
		this.labelField = options.labelField || "empty";	  
	}
}


Karthik_Mahalingam

5

Pascal Ganaye

Спасибо