typescript实现class时,get属性返回的值不是预期的类型?

作者站长头像
站长
· 阅读数 21

ts代码

export function test<T extends object>(data: T): Record<'test', T> {
  return { test: data }
}

class Helper<T extends object> {
  test(data: T) {
    return test<T>(data)
  }
}

type TestType<T extends object> = ReturnType<Helper<T>['test']>

interface DataType {
  code: string
}

const testDate = test<DataType>({ code: '123' })

class TestClass<T extends TestType<any>> {
  data: T
  get test() {
    return this.data.test
  }
  constructor(data: T) {
    this.data = data
  }
}

const testInstance = new TestClass(testDate)

testInstance.test

test那的类型不对typescript实现class时,get属性返回的值不是预期的类型?

回复
1个回答
avatar
test
2024-07-15

已使用infer解决

type TestInfer<T extends object> = T extends TestType<infer U> ? U : any
class TestClass<T extends TestType<any>, P extends TestInfer<T>> {
  data: TestType<P>
  get test() {
    return this.data.test
  }
  constructor(data: TestType<P>) {
    this.data = data
  }
}

answer image

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容