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

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那的类型不对
image.png

阅读 1.4k
1 个回答

已使用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
  }
}

[UU@5{3~(J)KQ68JNM2SB~2.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进