如何防止用户从 Typescript 中的函数返回任何内容?
正如您在此示例中所看到的,这些类型都不够:
type VoidReturner = () => void;
type UndefReturner = () => undefined;
type NeverReturner = () => never;
Run Code Online (Sandbox Code Playgroud)
void只告诉用户返回值不重要(忽略类型?)undefined要求开发者明确返回undefinednever是一个猜测,并且void(如示例 1 返回{})与它不匹配。使用以下代码时,字段的id和标签的for属性中的id不相同.
<%: Html.LabelFor(x => x.Localizations["en"]) %> => Localizations[en]
<%: Html.TextBoxFor(x=> x.Localizations["en"]) %> => Localizations_en_
<%: Html.LabelFor(x => x.Localizations["en"].Property) %>
=> Localizations[en]_Property
<%: Html.TextBoxFor(x=> x.Localizations["en"].Property) %>
=> Localizations_en__Property
Run Code Online (Sandbox Code Playgroud)
我在反射器中跟踪代码,发现生成值的方式不同.不使用相同的帮助方法.
LabelFor用途HtmlHelper.GenerateIdFromName和TextBoxFor用途TagBuilder#GenerateId.
有没有人知道这个的原因,或解决方法(除了编写你自己的整套输入/ textarea /选择助手)?或者这是一个错误?
更新:
因为我总是使用标签文本的第二个参数为标签使用html帮助器,我修改它以使用与表单字段助手相同的id生成代码.
public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, string labelText)
{
// The main part of this code is taken from the internal code for Html.LabelFor<TModel, TValue>(...).
var metaData = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);
var fieldName = ExpressionHelper.GetExpressionText(expression);
TagBuilder builder = new …Run Code Online (Sandbox Code Playgroud)