小编Bra*_*ell的帖子

DeepReadonly对象打字稿

可以创建这样的DeepReadonly类型:

type DeepReadonly<T> = {
  readonly [P in keyof T]: DeepReadonly<T[P]>;
};

interface A {
  B: { C: number; };
  D: { E: number; }[];
}

const myDeepReadonlyObject: DeepReadonly<A> = {
  B: { C: 1 },
  D: [ { E: 2 } ],
}

myDeepReadonlyObject.B = { C: 2 }; // error :)
myDeepReadonlyObject.B.C = 2; // error :)
Run Code Online (Sandbox Code Playgroud)

这很棒.这两个BB.C是只读的.当我尝试修改D但是...

// I'd like this to be an error
myDeepReadonlyObject.D[0] = { E: …
Run Code Online (Sandbox Code Playgroud)

immutability typescript

14
推荐指数
5
解决办法
3050
查看次数

地图打字稿枚举

我如何映射打字稿枚举?例如,使用字符串可以执行以下操作:

let arr = [ 'Hello', 'Goodbye' ];

arr.map(v => {
  if (v === 'Hello') {
    return ':)';
  } else if (v === 'Goodbye') {
    return ':(';
  }
); // [ ':)', ':(' ]
Run Code Online (Sandbox Code Playgroud)

当然,这不适用于枚举:

enum MyEnum { Hello, Goodbye };

MyEnum.map(v => {
  if (v === MyEnum.Hello) {
    return ':)';
  } else if (v === MyEnum.Goodbye) {
    return ':(';
  }
}); // does not work
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想以一种通用的方式执行此操作,因此我可以简单地使用任何枚举,并通过map函数将其保留,同时保留类型信息.用法可能如下所示:

map(MyEnum, v => {
  if (v === MyEnum.Hello) {
    return ':)'; …
Run Code Online (Sandbox Code Playgroud)

javascript enums typescript

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

TypeScript:我将如何为可调用/可扩展实体编写类型?

我有一个既可调用又可扩展的 javascript 函数/类。假设它名为Hello

Hello 可以通过以下两种方式之一使用:

class Hi extends Hello { }

或者

Hello('there');

我将如何编写类型Hello以便 TypeScript 知道它既可调用又可扩展?

typescript

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

标签 统计

typescript ×3

enums ×1

immutability ×1

javascript ×1