#javascript #reactjs #typescript
Вопрос:
допустим, у меня есть
type DataItems = {
id: number;
title: string;
subItems?: Array<DataItemChild>;
checked: boolean;
isEdit:boolean;
};
Я определил объект как
const myObj = {} as DataItems;
когда я осматриваюсь myObj
, я вижу {}
.
Я ожидал, что:
{
id: 0,
title: '',
subItems:[],
checked: false,
isEdit:false
}
Я мог бы определить свой объект как :
const myObj = {
id : 0,
title: '',
subItems: [],
checked: false,
isEdit: false,
} as DataItems;
Но мне интересно, есть ли способ сделать это по умолчанию без необходимости определять его вручную?
Комментарии:
1. не используйте
as
, когда это возможно. пробоватьconst myObj: DateItems = {}
. Так что Typescript выдаст ошибку о том, что вам не хватает некоторых реквизитов. На ваш вопрос: я об этом не знаю.2. Машинопись не предназначена для выполнения
Ответ №1:
Самый простой способ сделать это-сделать a class
, но вам всегда нужно использовать new DataItems
, чтобы «получить» значения по умолчанию.
type DataItemChild = any;
class DataItems {
id: number = 0;
title: string = '';
subItems: DataItemChild[] = []
checked: boolean = false;
isEdit:boolean = false;
};
const myObj = new DataItems();
console.dir(myObj);
Комментарии:
1. Я думаю, что это способ. То, что мне нужно, если есть встроенная функция машинописи, которая просто делает это за меня. Ваше решение хорошее, но оно все равно требует, чтобы я написал это вручную. то же, что и const myObj = { идентификатор : 0, заголовок:», подразделы: [], проверено: ложь, IsEdit: ложь,} в качестве элементов данных; и использование его в качестве типа по умолчанию.
2. Я приму это, так как это решение, я думаю, что то, что мне нужно, — это то, что в данный момент не поддерживает typescript.
3. То, что вы хотите, не существует в TypeScript или JavaScript. Преимущество по сравнению с их настройкой заключается в том, что вам нужно каждый раз устанавливать их вручную. Также обратите внимание: использование
as
просто говорит компилятору, что вы знаете лучше — он ничего не делает во время выполнения и не проверяет, чтобы подтвердить, что он «работает».
Ответ №2:
Нет, в typescript нет способа указать значение по умолчанию без его инициализации. Как бы typescript узнал, что вы хотите инициализировать число от 0, строка должна быть пустой, логическое значение должно быть пустым и так далее. Вы можете сделать следующее:
type DataItems = {
id: number;
title: string;
subItems?: Array<DataItemChild>;
checked: boolean;
isEdit:boolean;
};
const myObj : DataItems = {
id: 0,
title: '',
subItems:[],
checked: false,
isEdit:false
};