我正在尝试设计一种声明函数的方法,该函数可以返回一个 Promise 或一个 rxjs Observable 或一个 most Stream,并具有特定的返回类型,但我不知道在 TypeScript 中如何声明这个函数。
通常情况下,我希望在我的代码中使用类似以下的语法:
这样,我会得到错误:'T不是泛型'
对我来说,T 可以是 Promise、Observable 或 Stream
如果我能够有类似这样的东西,我可以声明一个特定的调度程序,根据我的声明返回我想要的值。
我想要的是当我调用函数f时,能够以不同的方式使用它。
或者
更新:
通常情况下,我希望在我的代码中使用类似以下的语法:
class Action<T> {
dispatcher: Function
constructor(dist) {
this.dispatcher = dist
}
f = <T>(s: string): T<string> => this.dispatcher('hello'+s)
}
这样,我会得到错误:'T不是泛型'
对我来说,T 可以是 Promise、Observable 或 Stream
如果我能够有类似这样的东西,我可以声明一个特定的调度程序,根据我的声明返回我想要的值。
const promiseDispacher = (x:any)=>Promise.resolve(x)
const observableDispacher = (x:any)=>Observable.of(x)
我想要的是当我调用函数f时,能够以不同的方式使用它。
const a = new Action<Promise>(promiseDistpacher)
a.f('random string').then((s: string)=>{
....
})
或者
const a = new Action<Observable>(observableDistpacher)
a.f('random string').subscribe((s: string)=>{
....
})
更新:
已更新
f
是一个执行某些操作并使用调度程序将结果包装在特定的 T
(Promise 或 Stream)中,并将其返回到执行该函数的类的函数。
f
应该是什么?你似乎既将其视为返回T
的函数(如果我理解你对Action
的实现),又将其视为T
本身(当你执行a.f.then()
等操作时)。无论如何,你可能想要像class Action<T>
一样将Action
设为泛型。但是,如果没有更多关于f
的理解,具体细节就会让我困惑。 - jcalzf
? - Ricardof
是一个函数,那么你为什么要尝试在它上面访问then()
方法呢?它只能是一个函数或者(比如说)一个 Promise... 不能同时是两者。那么它是哪一个呢? - jcalza.f.then(...)
。如果f
是一个函数,您需要调用它,就像a.f(“something”)。then(...)
一样。否则,我认为在函数返回一个东西和这个东西本身之间仍然存在一些混淆。 - jcalza.f(s)
中的s
是什么?请确保您的代码构成了一个 [mcve]。 - jcalz