小编Lui*_*ipe的帖子

将 NProgress 与“React.lazy”一起使用

我有以下组件树:

<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 的并发模式可以帮助解决这个问题?:)

javascript reactjs react-suspense

12
推荐指数
2
解决办法
2876
查看次数

如何让 TypeScript 生成一个 CommonJS 有效模块?

假设我在 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)

提前致谢。:)

module commonjs typescript

5
推荐指数
1
解决办法
2039
查看次数

可以使用 promise 来处理 JavaScript 中非常长且阻塞的循环吗?

假设我有以下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)

javascript loops promise

4
推荐指数
1
解决办法
108
查看次数

从对象类型中排除函数类型

在以下代码摘录中:

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不应过滤掉诸如此类的类型。

typescript

2
推荐指数
2
解决办法
859
查看次数

如何能够区分基于联合类型的两个对象?

我想实现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)

type-inference typescript

2
推荐指数
1
解决办法
42
查看次数