小编Hiv*_*aga的帖子

什么是 Typescript 中的“声明全局”?

什么是“声明全局”,这怎么可能?我在 Lodash 类型中找到了这段代码。问题是,当我尝试将它my.d.ts完全复制到文件中时,因为 global 不是命名空间、模块、函数或 var,我不允许这样做。所以问题是这个声明在 Typescript 中是如何可能的。

PS 所以也许有一些额外的编译器选项可以实现这一点?

declare global {
    interface Set<T> { }
}
Run Code Online (Sandbox Code Playgroud)

typescript typescript-typings

19
推荐指数
1
解决办法
1万
查看次数

在Typecript中使用Enum作为受限密钥类型

问题是可以枚举用作键类型而不仅仅是"数字"或"字符串"?目前似乎唯一可能的声明是x:{[key:number]:any}其中key可以是"number"或"string"类型.有可能在这个例子中做出类似的东西:

例:

enum MyEnum
{
    First,
    Second
}

var layer:{[key:MyEnum]:any};
Run Code Online (Sandbox Code Playgroud)

typescript

13
推荐指数
5
解决办法
3506
查看次数

使用 NX Monorepo 从另一个库导入构建库

情况如下。我正在使用 Nrwl NX Monorepo。我有 2 个库:lib-alib-b; 两者都是通过 NX 创建的可发布库。

现在我创建一个MyClass.tslib-a. workspace/tsconfig.json当然,在> NX中的路径下paths会为此创建一个别名lib-a( "@workspace/lib-a": ["libs/lib-a/src/index.ts"])。

到目前为止,一切都很好。现在我们可以通过导入它在工作区/monorepo 中的任何地方使用这个类import { MyClass } from '@workspace/lib-a';

不幸的是我们无法构建lib-b正在导入的MyClass. 当我们尝试这样做时,我们会收到以下错误。那么问题是我们如何构建lib-b

PS:奇怪的是,NX monorepo 实际上不支持链接 2 个可发布库的常见场景。

“错误 TS6059:文件“d:/workspace/libs/lib-a/src/index.ts”不在“rootDir”下“d:\workspace\libs\lib-b\src”rootDir 预计包含所有源文件”

tsconfig monorepo nrwl nrwl-nx

12
推荐指数
1
解决办法
9638
查看次数

Angular 的自定义模块生命周期是怎样的?

是否有有关模块生命周期的信息。目前 Angular 内部组件的生命周期有很好的文档记录,我们有诸如 、 等钩子ngOnInit()方法ngDoCheck()

我们是否有类似的 Angular 模块生命周期钩子?我在哪里可以读到这方面的内容?

angular2-injection angular2-modules angular

7
推荐指数
0
解决办法
2675
查看次数

Typescript中私有和受保护的构造函数的用法是什么

我注意到在Typescript中,您可以将构造函数定义为具有任何访问修饰符(私有,受保护,公共)。有人可以给出一个有效的示例,如何在Typescript中使用私有和受保护的构造函数吗?

例如,这是打字稿中的有效代码:

class A
{
    private constructor()
    {
        console.log("hello");
    }
}
Run Code Online (Sandbox Code Playgroud)

typescript

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

Typescript 高级类型 NonFunctionPropertyNames 解释

我试图更深入地了解 Typescript 中的高级类型,其中一种类型是 NonFunctionPropertyNames,它仅提取给定对象的属性。

type NonFunctionPropertyNames<T> = { [K in keyof T]: T[K] extends Function ? never : K }[keyof T];
Run Code Online (Sandbox Code Playgroud)

我可以理解大括号内的第一部分'{ [K in keyof T]: T[K] extends Function ? never : K }',我们声明一个对象并排除扩展 Function 的属性。让我困惑的是大括号后面的部分[keyof T]。这看起来像数组的定义{...}[keyof T],但实际上它返回对象。有人可以解释一下为什么只有大括号部分不足以声明类型,以及[keyof T].

typescript typescript-typings

3
推荐指数
1
解决办法
1027
查看次数

扩展枚举的打字稿

情况是你有一个常量或枚举列表,你该怎么做?

这是伪示例代码:

enum MyList
{
    A,
    B
}

enum MyList2
{
    C
}


function test<T>(input:MyList | T):void
{

}

test<MyList2>(123) // compiler does not identify that 123 is not a supported
Run Code Online (Sandbox Code Playgroud)

typescript

3
推荐指数
1
解决办法
5996
查看次数

提取数组值作为Typescript类型

基本上有一种方法可以将数组值提取为字符串类型?这是伪代码:

class A
{
    public keys = ['name', 'age']
}

type ArrayKeys = P in A['keys'] // 'name' or 'age'
Run Code Online (Sandbox Code Playgroud)

如何将ArrayKeys缩小为A ['keys']的可能值。

typescript

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

Typescript 中的 ()=&gt;any 和 {():any} 有什么区别

现在这段代码没有错误,Typescript 编译器认为它是完全有效的,但它们是一样的吗?有人可以解释这 2 种类型定义之间的区别,并为它们中的每一种都提供很好的用例示例。

const b = () =>'hello'

const x: ()=>string = b
const y: {():string} = b
Run Code Online (Sandbox Code Playgroud)

typescript

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

使用具体(旧)Angular 版本创建 NX Monorepo

生成 NX Monorepo 工作空间 ( https://nx.dev/ ) 的步骤很简单:

  1. npx create-nx-workspace(创建空工作区)
  2. yarn add -D @nrwl/angular (添加 nx 的 Angular 插件/原理图)
  3. nx生成worspace-schematic:application(将Angular应用程序添加到NX工作区)

您将得到一个 NX 工作区,其中包含 Angular(最新版本)应用程序。但是,如果我想创建其中包含 Angular 8.0 应用程序的 NX 工作区该怎么办?创建其中包含具体 Angular 版本的 NX 工作区的正确方法是什么?

monorepo nrwl nrwl-nx angular-workspace-configuration

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