ts的type配合交叉类型使用后, 看不到详细的完整值, 怎样才能看到呢

image.png
type stringKey = 'date' | 'dateTime' | 'endTime' | 'startTime'
type stringParams = Record<stringKey, string>

type numberKey = 'dateType' | 'a'
type numberParams = Record<numberKey, number>

export type reqParams = stringParams & numberParams
export let obj: reqParams = {

}
image.png

image.png
type oneOf<T extends string, P extends string> =
| ({

  [K in T]: string;
} & {
  [K in P]?: never;
})

| ({

  [K in P]: string;
} & {
  [K in T]?: never;
});

type startTime = oneOf<'startTime', 'startDate'>

type stringKey = 'date' | 'dateTime'
type stringParams = Record<stringKey, string>

type reqParams = stringParams & startTime
let obj: reqParams = {
date: 'date',
dateTime: 'dateTime',
startTime: 'startTime'
}
let obj1: reqParams = {
date: 'date',
dateTime: 'dateTime',
}
type reqParams1 = Omit<stringParams & startTime, ''>
// 这个应该报错才符合需求, 类似obj1
let obj2: reqParams1 = {
date: 'date',
dateTime: 'dateTime',
}
let obj3: reqParams1 = {
date: 'date',
dateTime: 'dateTime',
startTime: 'startTime'
}

阅读 1.4k
1 个回答

改一行即可

- export type reqParams = stringParams & numberParams
+ export type reqParams = Omit<stringParams & numberParams, ''>

TS会尽量保留你原来的结构,别名让提示看起来更舒适和优雅。现在我们这么做就是打断了原来的别名然后把所有东西揉杂在一起。

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