typescript 如何定义一个数组每项元素都是一对key/value对象,而不是多对?

代码:

interface Test {
    test: string,
    name: string
    str: string
    num: number
}

const arr: Array<{ [P in keyof Test]?: 'a' | 'b' }> = [{ name: 'a' }, { num: 'b' }, { test: 'a' }];
const arr: Array<{ [P in keyof Test]?: 'a' | 'b' }> = [{ name: 'a', num: 'b', test: 'a' }, { test: 'b' }, {}];

arr的定义它的两个赋值都不报错,我希望第二种报错,同时第一种不报错,应该怎么定义arr

===============更新===============

interface Test {
    test: string
    name: string
    str: string
    num: number
}

interface Test1 {
    f1: string
    f2: string
    f3: number
}

type Chosed = 'a' | 'b'

function testFn<T extends Record<string, any>>(arg1: T, arg2: Array<{ [K in keyof T]?: Chosed }>) {
    console.log(arg1, arg2);
}

type Fn1Args2 = Array<{ test: Chosed } | { name: Chosed } | { str: Chosed } | { num: Chosed }>
testFn<Test>({ test: '1', name: '2', str: '3', num: 4 }, [{ name: 'a' }, { num: 'a' }] as Fn1Args2);

type Fn2Args2 = Array<{ f1: Chosed } | { f2: Chosed } | { f3: Chosed }>
testFn<Test1>({ f3: 1, f2: '2', f1: '3' }, [{ f2: 'a', f1: 'a' }] as Fn2Args2);

testFn函数的arg1属性可变,这时候将arg2定义为联合类型显然需要每个调用的地方都定义一次,怎么避免这一点,候如何保证arg2每项都是一对键值对的Object,且其key在arg1对象中,现在的 Array<{ [K in keyof T]?: 'a' | 'b' }>这个写法没法限制只有一对键值对

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