Вот мой путь. Конечно, вы можете ввести его в процедуру: -)
SET @median_counter = (SELECT FLOOR(COUNT(*)/2) - 1 AS `median_counter` FROM `data`);
SET @median = CONCAT('SELECT `val` FROM `data` ORDER BY `val` LIMIT ', @median_counter, ', 1');
PREPARE median FROM @median;
EXECUTE median;
Вы можете избежать переменной @median_counter
, если вы ее подставите:
SET @median = CONCAT( 'SELECT `val` FROM `data` ORDER BY `val` LIMIT ',
(SELECT FLOOR(COUNT(*)/2) - 1 AS `median_counter` FROM `data`),
', 1'
);
PREPARE median FROM @median;
EXECUTE median;
Во-первых, я рекомендую декларировать ваши компоненты способом ES6
const Hello: React.FC<IHello> = ({ name, enthusiasmLevel = 1 }) => {}
Ваш интерфейс определяет контракт вашего компонента / Принятые параметры
export interface IHello {
name: string;
enthusiasmLevel?: number;
}
Вы экспортируете это, так что вы можете импортируйте ваш интерфейс из других файлов / компонентов, которые хотят использовать компонент Hello
. Например, вы можете использовать свой компонент Hello
так же, как и из другого компонента:
const props: IHello = {
name: "John",
enthusiamsLevel: 5
}
<Hello {...props} />
Если я уже использую этот тип синтаксиса интерфейса Typescript для проверки типа, мне все еще нужно использовать Proptypes в одном и том же компоненте?
blockquote>Вы всегда хотите использовать строгие определения типов в TypeScript. Поэтому, когда вы объявляете переменную prop в другом компоненте, вы не хотите этого делать
const props: any = {
. Если вы решите изменить объявление интерфейса для этого компонента позже, вам придется обновить все ссылки, которые используют этот интерфейс. - Возможно, вы захотите потребовать еще 1 переменную проп, и в этом случае вы захотите обновить использование этого интерфейса. Если вы не привыкли к TypeScript, на первый взгляд это может показаться довольно отвратительным, но выгода от наличия четких определений типов со временем будет очевидна. Особенно, когда вы обновляете определения типов.