Вот за что я люблю машинописный текст, потому что он не позволяет мне чушь пороть.
Измерить длину числового значения и т. д. Сначала я, конечно, плюнул, возмутился, что ко мне приставают со всякими дурацкими формальностями.
Но потом я втянулся и влюбился сильнее.
Ну, в смысле чуть-чуть строже.
Я включил в проекте опцию strictNullChecks и потратил три дня на исправление возникших ошибок.
А потом с удовлетворением обрадовался, отметив, насколько легким и непринужденным стал рефакторинг.
Но тогда вам хочется чего-то еще большего.
И здесь вам нужно объяснить машинописцу, какие ограничения вы на себя накладываете, и делегировать ему обязанность следить за соблюдением этих ограничений.
Давай, сломай меня полностью.
Пример 1
Некоторое время назад меня увлекла идея использовать React в качестве шаблонизатора на сервере.Конечно, меня заворожила возможность печатать.
Да там всякие мопсы, усы и еще много чего.
Но самому разработчику приходится иметь в виду, не забыл ли он расширить переданный в шаблон аргумент новыми полями.
(Если это не так, поправьте меня.
Но в целом мне все равно — слава богу, мне по роду деятельности не приходится генерировать шаблоны.
И пример о другом).
И здесь мы можем нормально набирать реквизиты, передаваемые компоненту, и получать соответствующие подсказки IDE при редактировании шаблона.
Но это внутри компонента.
Теперь проверим, что мы не передали в этот компонент никакой леворукости.
Теперь если мы попытаемся передать реквизиты из заказа в пользовательский компонент, нам сразу укажут на это недоразумение.import { createElement, FunctionComponent, ComponentClass } from 'react'; import { renderToStaticMarkup } from 'react-dom/server'; export class Rendered<P> extends String { constructor(component: FunctionComponent<P> | ComponentClass<P>, props: P) { super('<!DOCTYPE html>' + renderToStaticMarkup( createElement(component, props), )); } }
Прохладный? Прохладный.
Но это во время генерации html. Как обстоят дела с его дальнейшим использованием? Потому что результат установки Рендеринг это просто строка, то машинописный текст не будет жаловаться, например, на такую конструкцию: const html: Rendered<SomeProps> = 'Typescript cannot into space';
Соответственно, если мы напишем что-то вроде этого контроллера: @Get()
public index(): Rendered<IHelloWorld> {
return new Rendered(HelloWorldComponent, helloWorldProps);
}
это никак не гарантирует, что из этого метода будет возвращен именно результат компиляции компонента HelloWorldКомпонент .
Что ж, давайте сделаем это не просто строкой :) export class Rendered<P> extends String {
Теги: #JavaScript #node.js #typescript #печатать
-
Руководство Для Инсайдеров По Веб-Хостингу
19 Oct, 24 -
Экс-Главу "Вымпелкома" Арестовали В Норвегии
19 Oct, 24 -
Какой Php-Отладчик Вы Используете И Почему?
19 Oct, 24