Repository navigation
Compiled code contain jsx code.Β #54411
Copy link
Copy link
Closed
Labels
BugA bug in TypeScriptA bug in TypeScriptFix AvailableA PR has been opened for this issueA PR has been opened for this issue
Milestone
Description
Bug Report
Compiled code contain jsx code <Label label='aaaa'/>
π Search Terms
π Version & Regression Information
Typescript version 5.1.0-beta
β― Playground Link
Playground link with problem code
Playground link with work code
π» Code
import * as React from 'react';
const Label: React.FC<{ label: string; }> = props => <label>{props.label}</label>;
interface BindProps<T = any, K extends keyof T = any> {
bObject: T;
bKey: K;
bLabel?: string | React.ReactNode;
}
function bind<T, K extends keyof T>(bObject: T, bKey: K, bLabel?: string | React.ReactNode): BindProps<T, K> {
return { bObject, bKey, bLabel };
}
function withBind<P extends object, V extends keyof P, C extends keyof P>(
Component: React.ComponentType<P>,
pick: (value: P[V], onChange: (value: P[V]) => void) => Pick<P, V | C>
) {
return class extends React.Component<Omit<P, V | C> & BindProps> {
private onChange = () => {
};
render() {
const { bObject, bKey, bLabel, ...rest } = this.props;
const props = { ...pick(bObject[bKey], this.onChange), ...rest } as P;
const element = <Component {...props} />;
if (bLabel === undefined) {
return element;
}
return (
<>
{typeof bLabel === 'string' ? <Label label={bLabel} /> : bLabel}
{element}
</>
);
}
}
}
interface TextInputProps {
value: string;
onChange: React.ChangeEventHandler<HTMLInputElement>;
}
const TextInput: React.FC<TextInputProps> = props => <input type='text' {...props} />;
export const BTextInput = withBind<TextInputProps, 'value', 'onChange'>(TextInput, (value, onChange) => {
return { value, onChange: e => onChange(e.currentTarget.value) };
});
const obj = { text: '' };
<BTextInput {...bind(obj, 'text', <Label label='aaaa' />)} />;π Actual behavior
React.createElement(exports.BTextInput, Object.assign({}, bind(obj, 'text', <Label label='aaaa'/>)));π Expected behavior
React.createElement(exports.BTextInput, Object.assign({}, bind(obj, 'text', React.createElement(Label, { label: 'aaaa' }))));Metadata
Metadata
Assignees
Labels
BugA bug in TypeScriptA bug in TypeScriptFix AvailableA PR has been opened for this issueA PR has been opened for this issue
Activity
RyanCavanaugh commentedon May 26, 2023
Simpler:
This is specific to when we need to call
Object.assignor__assignto emit the spread. When the emit uses a native JS spread, then we don't see thisericrafalovsky commentedon May 31, 2023
Once merged, can the fix be cherry picked into a 5.1.x release? This seems like a regression currently in 5.1.2-rc.
thatsmydoing commentedon Jul 4, 2023
There's a minor variation of this that's not fixed in 5.1.6 or the latest nightly
RyanCavanaugh commentedon Jul 13, 2023
Fixed the variation in the linked issue/PR