Typescript 实现一个与;“匿名”;方法

Typescript 实现一个与;“匿名”;方法,typescript,Typescript,给定以下接口Fn interface Fn<A> { (): A } 如果要创建一个可调用且具有其他功能的对象,最好的方法是从函数对象开始。但是,由于函数的本机推断类型与要生成的实际类型不匹配,因此需要类型断言: interface Fn<A> { (): A } function buildFn<A>( val: A ): Fn<A> { return () => { return val } } export

给定以下接口
Fn

interface Fn<A> {
    (): A
}

如果要创建一个可调用且具有其他功能的对象,最好的方法是从
函数
对象开始。但是,由于函数的本机推断类型与要生成的实际类型不匹配,因此需要类型断言:

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;
}
接口Fn{
():A
}
函数构建Fn(val:A):Fn{
return()=>{return val}
}
导出接口FnString扩展了Fn{
():字符串
toLowerCase():字符串
}
接口字符串{}
导出函数builderFn():太棒了{
var-str=('asdf');
变量fn=(()=>str);
fn.toLowerCase=str.toLowerCase;
返回fn;
}

还要注意,
string
string
不同,
string
是一种反模式(因此我重构为
string

谢谢大家,;让我细细考虑一下,我会给你回复(String->String;是的;谢谢,我是手动输入的),这样就可以了,根据我的测试,没有必要使用
Awesome
界面。有些令人惊讶的是,尽管casted函数缺少
toLowerCase
属性,但是编译器可以容忍cast
var fn=(()=>str)
,如何实现具有多个匿名方法的接口?
interface FnString extends Fn<string> {
    (): string
    toLowerCase(): string
}
function builderFn(str: string): FnString {
    var fn = <FnString>(() => str)
    fn.toLowerCase = str.toLowerCase
    return fn
}
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;
}