Учитывая следующий интерфейс Fn
,реализации интерфейса с «анонимным» метод
interface Fn<A> {
(): A
}
можно создать экземпляр объекта, реализующего интерфейс, используя построитель
function buildFn<A>(val: A): Fn<A> {
return() => { return val }
}
Теперь, используя следующий интерфейс, который действителен в машинописном документе
interface FnString extends Fn<string> {
(): string
toLowerCase(): string
}
ho w я пишу функцию строителя для создания экземпляра объекта, реализующего FnString
?
редактировать: раствор благодаря @basarat
Примечание: переработан String
->string
согласно комментарии
function builderFn(str: string): FnString {
var fn = <FnString>(() => str)
fn.toLowerCase = str.toLowerCase
return fn
}
Спасибо; позвольте мне немного жевать это, и я вернусь к вам (String -> string; yes; спасибо, я набрал это вручную в SO) –
Это работает, и, согласно моим тестам, нет необходимости в интерфейсе 'Awesome'. Несколько удивительно, что листинг 'var fn = (() => str)' переносится компилятором, хотя функция casted не имеет свойства 'toLowerCase' –