typescript 如何返回一个动态对象类型

26 天前
 tmkook
class a extends schema {
    fun1 () => 1
}
class b extends schema{
    fun2 () => 2
}

const objs = {
    a:new a
    b:new b
}

function find(key) : any{
    return objs[key]
}

这个 objs 很多个 obj 他们都继承自同一个父类,有什么办法在调用 find 返回的对象能保持代码提示吗?

let obj = find('a')
obj.fun1 //代码提示

1054 次点击
所在节点    TypeScript
5 条回复
RomeoHong
26 天前
type Objs = typeof objs;
function find<K extends keyof Objs>(key: K): Objs[K] {
return objs[key]
}
tmkook
26 天前
@RomeoHong 感谢回复,我的例子好像不太对。还是没有解决,我补充一下。
bjzhou1990
26 天前
function find<T extends Schema>(key: string): T {
return objs[key]
}

const c = find('a')
c.attr('a', 'b')

不知道是不是你要的
tmkook
25 天前
@bjzhou1990 不行,似乎实现不了,估计递归太复杂无法推断返回的类型
nebnyp410404
25 天前
class schema {
func: Function
}

class a extends schema {
fun1: () => 1
}
class b extends schema{
fun2: () => 2
}

const objs = {
a:new a,
b:new b
}

type Key = keyof typeof objs;

function find<T extends Key>(key: T): typeof objs[T] {
return objs[key];
}

const cc = find('a')

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1139989

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX