假设我有一个打字稿界面:
\n\ninterface MyInputInterface {\n a: A | null\n b: B |\xc2\xa0null\n aString: string | null\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这就是我目前所拥有的:
\n\nconst hasOneNonNull = (input: MyInputInterface) => \n input.a !== null || input.b !== null ||\xc2\xa0input.aString !== null\nRun Code Online (Sandbox Code Playgroud)\n\n但这看起来很脆弱。每次添加新的接口成员时,我都必须记住更新检查。有没有一种方法可以遍历所有接口成员并检查其中至少一个不为空?
\n\n像这样的东西会更理想(getAllMembers是伪代码):
const hasOneNonNull = (input: MyInputInterface) => \n input.getAllMembers().find((elem: any) => any !== null) !== null\nRun Code Online (Sandbox Code Playgroud)\n
您正在寻找Object.values:
const hasOneNonNull = (input: MyInputInterface) =>
Object.values(input).reduce((hasNonNull, value) => hasNonNull|| value !== null, false);
Run Code Online (Sandbox Code Playgroud)
您还可以利用联合类型来指定您至少需要a或b:
type MyInputInterface =
| { a: A; b: B | null; aString: string | null; }
| { a: A | null; b: B; aString: string | null; }
| { a: A | null; b: B | null; aString: string; }
Run Code Online (Sandbox Code Playgroud)
还可以使用 Typescript 的映射类型来指定类型:
以下内容摘自此SO答案:
interface FullMyInputInterface {
a: A;
b: B;
aString: string;
}
type AtLeastOne<T, U = {[K in keyof T]: Pick<T, K> }> = Partial<T> & U[keyof U]
type MyInputInterface = AtLeastOne<FullMyInputInterface>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1563 次 |
| 最近记录: |