Hir*_*uri 6 typescript reactjs
我想知道是否可以根据另一种类型的值来扩展类型?
\ninterface NavType {\n hideNav?: boolean\n dev?: boolean\n}\nRun Code Online (Sandbox Code Playgroud)\nhideNav我想仅当arg 为 false 时才允许使用dev。
const Navbar: React.FC<NavType> = ({ children, hideNav, dev = false }) => (\n <nav>\n {!dev ? (\n <NavDefault hideNav={!!hideNav}>{children}</NavDefault>\n ) : (\n <NavDev>{children}</NavDev>\n )}\n </nav>\n)\nRun Code Online (Sandbox Code Playgroud)\n在这种情况下我该如何使用条件语句?
\n// Should PASS\nconst navArgs1: NavType = {\n hideNav: undefined,\n dev: true\n}\n\nconst navArgs2: NavType = {\n hideNav: true or\xc2\xa0false,\n dev: false\n}\n\n// Should NOT PASS\nconst navArgs3: NavType = {\n hideNav: true or\xc2\xa0false,\n dev: true\n}\nRun Code Online (Sandbox Code Playgroud)\n
您可以定义两种类型并让组件属性成为它们的并集;原则上如下(如TS Playground代码所示):
interface NavBase {
dev: boolean;
}
interface DevNavType extends NavBase {
dev: true;
hideNav?: undefined;
}
interface NotDevNavType extends NavBase {
dev: false;
hideNav: boolean;
}
// This simulates your component
function f(x: DevNavType | NotDevNavType) {
}
f({ dev: true }); // Works
f({ dev: true, hideNav: undefined }); // Also works
f({ dev: false, hideNav: true }); // Works too - for any boolean value of hideNav
f({ dev: false }); // Compiler error
f({ dev: true, hideNav: true }); // Compiler error
Run Code Online (Sandbox Code Playgroud)
笔记:
NavBasetype NavType = DevNavType | NotDevNavType| 归档时间: |
|
| 查看次数: |
380 次 |
| 最近记录: |