如何正确注释以下内容:
@(Html.Kendo().ComboBoxFor(model => model.SalesOffice)
.Name("SalesOffice")
.HtmlAttributes(new { style = "width:300px" })
.DataTextField("SalesOffice")
.DataValueField("SalesOfficeID")
.Filter("Contains")
.DataSource(dataSource => dataSource
.Read(read =>
{
read.Action("RequestHeader_SalesOffice", "Request")
.Type(HttpVerbs.Post)
.Data("GetFilterOption"); <-- This Bit
})
.ServerFiltering(true)
).CascadeFrom("SalesOrganisation") //<--This Bit
)
我确实理解错误,因为返回类型export class TestCls {
static SomeStaticFn(): TestCls {
// Do some stuff...
// Return the class descriptor to allow a "fluid usage" of SomeStaticFn
return TestCls;
}
}
// TS error TS2339: Property 'SomeStaticFn' does not exist on type 'TestCls'.
TestCls.SomeStaticFn().SomeStaticFn();
注释了类&#34;本身&#34;而不是它的描述,但我不知道如何正确地注释这个...
Ps。:我不是100%肯定这里正确的术语(类&#34;本身&#34;,描述符等),并且非常感谢这里的一些更正。
答案 0 :(得分:0)
这个问题起初可能听起来有些奇怪,但TypeScript抛出的原因是静态函数的签名。我希望以下是合理的:
如果使用类的名称(TestCls
)来指定函数的返回值,则该函数应返回该类的实例。不是构造函数(=它的定义是你如何调用它)。这意味着,编写类似foo():MyClass
的内容,TypeScript希望foo()
返回MyClass
的新实例,而不是类本身。
另外,定义这样的函数签名,TypeScript会尝试断言你给它的返回类型是正确的。所以:MyClass
实际上是类型断言。这意味着您将覆盖TypeScript所引发的返回类型。
奇怪的是,如果你写这样的东西:
function hello (): string {
return 5;
}
TypeScript会告诉您Type '5' is not assignable to type 'string'
。我猜TypeScript无法真正区分该类及其实例是不同的。在一天结束时,他们都是object
s。
tl; dr; 从静态函数中删除返回类型断言,一切都会好的。 TypeScript足够智能,无论如何都可以推断出返回类型。
export class TestCls {
static SomeStaticFn() {
// Do some stuff...
// Return the class descriptor to allow a "fluid usage" of SomeStaticFn
return TestCls;
}
}
TestCls.SomeStaticFn().SomeStaticFn();