The <text-input> tag helper is used to create <input> elements. The tag helper detects what the type attribute of the <input> should be in most cases, so you don't usually need to supply a type.
The <text-input> tag helper generates error messages if its corresponding model member fails validation.
The <text-input> tag helper renders child content as a raw HTML child of the generated <label>.
To use the <text-input> tag helper, all you need to do is add it to the form and supply the asp-for attribute, just like you would with the built-in <input> tag helper:
public class MyModel : PageModel
{
    [BindProperty]
    public string FirstName { get; set; }
    [BindProperty]
    public int Age { get; set; }
}
@model MyModel
<form>
    <text-input asp-for="FirstName" />
    <text-input asp-for="Age" />
</form>
The HTML generated by the <text-input> tag helper looks like this:
<div> <!-- component wrapper -->
    <div> <!-- input block wrapper -->
        <div> <!-- label wrapper, disable in configuration -->
            <label for="FirstName">
                First name
            </label>
        </div>
        <div> <!-- input wrapper, disable in configuration -->
            <!-- type varies based on model -->
            <input type="text"
                   id="FirstName"
                   name="FirstName"
                   value="">
        </div>
    </div>
    <ul> <!-- error wrapper, only rendered if errors are present -->
        <li>...</li>
    </ul>
</div>