小编Max*_*lan的帖子

如何正确缩小“未知”类型

tl;博士为什么

const func = (a: unknown) => {
  if (a && typeof a === 'object' && 'b' in a) {
    a.b;
  }
};
Run Code Online (Sandbox Code Playgroud)

给出以下错误信息

Property 'b' does not exist on type 'object'.
Run Code Online (Sandbox Code Playgroud)

编辑:在更仔细地研究这个问题之后,我有一个更简单的例子。所以让我重新表述一下我的问题:

如何缩小objectTypeScript 中的输入范围?

tl;博士为什么

const func = (a: object) => {
  if ('b' in a) {
    a.b;
  }
Run Code Online (Sandbox Code Playgroud)

给出以下错误信息:

Property 'b' does not exist on type 'object'.
Run Code Online (Sandbox Code Playgroud)

typescript typescript-typings

11
推荐指数
1
解决办法
5995
查看次数

从打字稿模块导出所有类型(和只是类型)

如果我想导出一个模块的所有导出成员(包括代码),我可以使用

export * from 'module'
Run Code Online (Sandbox Code Playgroud)

如果我想在没有代码的情况下导出类的类型,我可以做

export type {typeName} from 'module'
Run Code Online (Sandbox Code Playgroud)

现在我需要从模块中导出所有类型而无需代码。我很想这样做

export type * from 'module'
Run Code Online (Sandbox Code Playgroud)

因为这是直观的事情,但是打字稿类型导出必须命名为导出(ts 1383)。

那么我如何才能以在运行时无法使用其成员的方式从模块中导出所有内容?

我能想到的解决方法:

  1. 克服它并使用export *. 这是一个选项。但是对于我们的用例,我不希望我们库的用户使用这些类,而只是使用它们来注释他们的类型

  2. 请漂亮,请使用我们图书馆的每个人都使用import type {typeName} from 'myLibrary'. 我想这也是一个选择,但我如何说服用户这样做?

tl;dr:如何在 Typescript 中模拟全局类型导出?

typescript typescript-typings

10
推荐指数
1
解决办法
702
查看次数

打字稿将字符串文字类型映射为大写

type a = 'one' | 'two'
Run Code Online (Sandbox Code Playgroud)

我想要一个type b

type b = 'ONE' | 'TWO'
Run Code Online (Sandbox Code Playgroud)

所以我试过了

type a = 'one' | 'two'
type b = {[P in a]: P['toUpperCase']}
Run Code Online (Sandbox Code Playgroud)

但这并不能做我想要它做的事情。

感谢您阅读:)

javascript types type-conversion typescript typescript-typings

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

不要在shell中为vim自动完成文件名中的某些扩展

我注意到bash中bash完成的一个非常酷的功能.假设我有一个包含文件的目录

a.java
a.class
b.java
b.class
Run Code Online (Sandbox Code Playgroud)

如果我开始输入vim a Tab,bash将自动完成a.java.它知道我不想编辑a.class

我想知道它是如何实现这种行为的.在我的bash_completion.d目录中有一堆completion文件,但vim没有一个.如何vim实现此行为,以及如何修改它以包含要忽略的其他文件扩展名?

macos vim bash bash-completion

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