鉴于以下界面Fn,
interface Fn<A> {
(): A
}
Run Code Online (Sandbox Code Playgroud)
可以使用构建器实例化实现接口的对象
function buildFn<A>( val: A ): Fn<A> {
return () => { return val }
}
Run Code Online (Sandbox Code Playgroud)
现在,使用以下在 Typescript 中有效的接口
interface FnString extends Fn<string> {
(): string
toLowerCase(): string
}
Run Code Online (Sandbox Code Playgroud)
我如何编写一个构建器函数来实例化一个实现的对象FnString?
编辑:解决方案感谢@basarat
注意:重构String->string根据评论
function builderFn(str: string): FnString {
var fn = <FnString>(() => str)
fn.toLowerCase = str.toLowerCase
return fn
}
Run Code Online (Sandbox Code Playgroud)
如果您想创建一个可调用且具有其他功能的对象,最好的方法是从一个对象开始function。但是,由于函数的本机推断类型与您要构建的实际类型不匹配,因此您需要类型断言:
interface Fn<A> {
(): A
}
function buildFn<A>( val: A ): Fn<A> {
return () => { return val }
}
export interface FnString extends Fn<string> {
(): string
toLowerCase(): string
}
interface Awesome extends FnString { }
export function builderFn(): Awesome {
var str = ('asdf');
var fn = <Awesome>(() => str);
fn.toLowerCase = str.toLowerCase;
return fn;
}
Run Code Online (Sandbox Code Playgroud)
另请注意,string与 不同,String并且String是反模式(因此我重构为string)。
| 归档时间: |
|
| 查看次数: |
2547 次 |
| 最近记录: |