假设我有以下界面:
interface updateOptions {
updateAll: boolean;
fields: string[];
}
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以updateAll在未提供时进行要求Fields,反之亦然,或者这是在实施中必须有条件地完成的事情?
使用标记的联合类型:
type UpdateOptions =
| {updateAll: true}
| {updateAll: false, fields: string[]}
Run Code Online (Sandbox Code Playgroud)
这样你只能初始化{updateAll: true}或{updateAll: false, fields: ['someField', /*...*/]}
从技术上讲,联合不需要有标签( boolean updateAll),但是您需要定义类型保护来测试特定分支中使用的类型(我假设您将在代码中的某个位置执行此操作if (options.updateAll) {/* ... */}):
type UpdateAllOptions = {updateAll: true}
type UpdateSomeOptions = {fields: string[]}
type UpdateOptions = UpdateAllOptions | UpdateSomeOptions
// See https://www.typescriptlang.org/docs/handbook/advanced-types.html#user-defined-type-guards
const isAllOptions = (options: UpdateOptions): options is UpdateAllOptions =>
(options as any).updateAll === true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1147 次 |
| 最近记录: |