Канал о программировании
Реклама - @vlad_0045
Мой личный контакт - @ngArchie
Мой ютуб канал - https://www.youtube.com/@temaProg
Post #51
2.94K
ТО @temaprog
Showing posts older than #52 · Back to latest
ТОП - Тёма о программировани Enums - зло? Или мы просто не поняли замысел творца? Вокруг enums в TS ходит большое кол-во споров. Кто-то их любит, кто-то ненавидит. Я был и в том, и в другом лагере. Давайте посмотрим на их плюсы и минусы(по моему мнению), чтобы вам было проще вывести…
const BookGenre = {
horror: 'horror',
comedy: 'comedy'
} as const
type BookGenre = 'horror' | 'comedy' // как обычный тип уйдет на компиляции
const BookGenre = {
horror: 'horror',
comedy: 'comedy'
} as const
type BookGenre = keyof typeof BookGenre
function logGenre(genre: BookGenre) {} // тип
logGenre(BookGenre.comedy) // значение
enum BookGenre {
horror = 1,
comedy = 'comedy'
}
enum BookGenre {
horror = 'horror',
comedy = 'comedy'
}
function logGenre(genre: BookGenre) {}
logGenre(BookGenre.comedy)
logGenre(BookGenre.comedy)
logGenre('comedy') // error
enum BookGenre {
horror,
comedy
}
console.log(BookGenre.comedy) // 1
console.log(BookGenre[1]) // comedy
enum BookGenre {
horror = 1,
comedy = 1
}
console.log(BookGenre[1]) // ?
var BookGenre;
(function (BookGenre) {
BookGenre[BookGenre["horror"] = 1] = "horror";
BookGenre[BookGenre["comedy"] = 1] = "comedy";
})(BookGenre || (BookGenre = {}));
console.log(BookGenre[25])
var BookGenre;
(function (BookGenre) {
BookGenre[BookGenre["horror"] = 1] = "horror";
BookGenre[BookGenre["comedy"] = 1] = "comedy";
})(BookGenre || (BookGenre = {}));
enum BookGenre {
horror = 'horror',
comedy = 'comedy'
}
// много строк между
enum BookGenre {
drama = 'drama'
}
var BookGenre;
(function (BookGenre) {
BookGenre["horror"] = "horror";
BookGenre["comedy"] = "comedy";
})(BookGenre || (BookGenre = {}));
(function (BookGenre) {
BookGenre["drama"] = "drama";
})(BookGenre || (BookGenre = {}));

try {
// logic
} catch (error: Error) {
}
Catch clause variable type annotation must be 'any' or 'unknown' if specified.ts(1196)
throw 'hello';
throw null;
throw {};
throw undefined;
throw 123;
try {
// logic
} catch (error: unknown) {
}
if (error instanceof Error) {
return error.message; // как пример
}

function MyComponent() {
const inputRef = useRef(null);
useEffect(() => {
inputRef.current?.focus();
}, []);
return (
<div>
{/* разные элементы */}
<input ref={inputRef} />
{/* разные элементы */}
</div>
);
}
RefCallback<T> | RefObject<T>
function MyComponent() {
const onRender = useCallback((element) => {
element?.focus();
}, []);
return (
<div>
{/* разные элементы */}
<input ref={onRender} />
{/* разные элементы */}
</div>
);
}