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
属性,但是编译器可以容忍castvar 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;
}