我有以下组件树:
<BrowserRouter>
<Suspense fallback={<h1>MyFallback</h1>}>
<Switch>
<Route component={HomePage} path="/" exact />
<Route
component={lazy(() => import('./pages/Auth/Login'))}
path="/auth/login"
exact
/>
</Switch>
</Suspense>
</BrowserRouter>
Run Code Online (Sandbox Code Playgroud)
我React.Suspense用来显示加载回退。但是,现在我想在当前页面的顶部显示一个进度条,而不是使用正常的 Suspense 加载回退,这会删除整个当前路线以显示回退。
例如,如何添加 NProgress 以指示正在加载的页面的加载进度?
也许新的 React 的并发模式可以帮助解决这个问题?:)
假设我在 TypeScript 中有一个模块:
export default function myModule(name: string): void {
alert(`Hello, ${name}!`)
}
Run Code Online (Sandbox Code Playgroud)
当我运行tsc构建上述代码,并尝试通过Node.js(纯JavaScript)导入生成的代码时:
const myModule = require('./dist/myModule.js')
myModule('Luiz') // ERROR! `myModule` is `undefined`
Run Code Online (Sandbox Code Playgroud)
使其工作的唯一方法是.default在 之后使用require(),这不是我想要的:
// ????????
const myModule = require('./dist/myModule.js').default
myModule('Luiz') // Now it works.
Run Code Online (Sandbox Code Playgroud)
如何让 TypeScript 生成一个输出,我可以在没有该.default属性的情况下将其用作 Node.js 模块(因为我将包发布到 NPM 中)?像这样:
const myModule = require('my-module')
Run Code Online (Sandbox Code Playgroud)
提前致谢。:)
假设我有以下for循环,这显然会阻塞事件循环一段时间:
function somethingExpensive() {
let i = 0;
while (true) {
// Something expensive...
if (++i === 1e10) return 'Some value.'
}
}
Run Code Online (Sandbox Code Playgroud)
我可以将该操作(for循环)包装在一个 Promise 中,这样它就不会阻塞“主线程”吗?
类似的东西:
function somethingExpensive() {
return new Promise((resolve) => {
let i = 0;
while (true) {
// Something expensive...
if (++i === 1e10) resolve('Some value.');
}
});
}
Run Code Online (Sandbox Code Playgroud) 在以下代码摘录中:
interface User {
name: string;
age: number;
bestFriend: User;
getInfo: () => any;
}
type MyCustomType = {
[key in keyof User]: User[key]
};
Run Code Online (Sandbox Code Playgroud)
有没有办法只删除该接口的函数类型?我已经创建了MyCustomType类型,但我没有找到删除函数类型的方法,例如getInfo.
如何只允许该MyCustomType类型中的非函数类型?
PS:User不应过滤掉诸如此类的类型。
我想实现tryInline,它应该尝试调用一个函数并根据调用的成功或失败返回两种对象。
如果fn参数被成功调用,tryInline应该返回:
{
ok: true,
data: <The value returned by `fn`>,
error: null
}
Run Code Online (Sandbox Code Playgroud)
如果fn抛出错误,tryInline应该返回:
{
ok: false,
data: null,
error: Error
}
Run Code Online (Sandbox Code Playgroud)
我设法做到了以下几点:
type Result<D> =
| { ok: true; data: D; error: null }
| { ok: false; data: null; error: Error };
function tryInline<Fn extends (...args: any[]) => any>(
fn: Fn,
...args: Parameters<Fn>
): Result<ReturnType<Fn>> {
try {
const data = fn(...args);
return { ok: true, data, …Run Code Online (Sandbox Code Playgroud)