首页 > 解决方案 > 如果 keyof 则推断函数签名

问题描述

我正在尝试通过以下添加(注)定义一个函数签名根据是否更改的Column类型:rendernamekeyof Rowname?: string

 | {
    name?: string
    render: (payload: { row: Row }) => string
}

请注意,从代码示例中删除上面的 ^ 会使一切按预期工作,只要namekeyof Row

有没有办法做我想做的事情,或者这是打字稿限制?这是完整的代码示例:

打字稿游乐场链接

type Column<Row> = {
  [K in keyof Row]: {
    name: K
    render?: (payload: { value: Row[K], row: Row }) => string
  }
}[keyof Row] | {
    name?: string
    render: (payload: { row: Row }) => string
}

interface MyRow {
  foo: string
}

const columns: Column<MyRow>[] = [{
  name: 'foo',
  render: ({ row, value }) => value
}, {
  name: 'notInMyRow',
  render: ({ row }) => { 
    return 'hello'
  }
}]

相关错误: Binding element 'row' implicitly has an 'any' type.(7031)

标签: typescript

解决方案


推荐阅读