首页 > 解决方案 > 对数组的每个项目的 TypeScript 断言

问题描述

我定义了一个数组interface

interface Converter<T = Buffer> {
  name: string;
  uuid: CUUID;
  decode: (value: Buffer) => T;
}

type Converters = ReadonlyArray<Converter<any>>;

但对于我的用例,我需要使用const断言强制转换该数组中的每个项目:

const infoConverter = {
  name: "info",
  uuid: "180a",
  decode: (v: Buffer) => v.toString()
} as const;

const pressureConverter = {
  name: "pressure",
  uuid: "1810",
  decode: (v: Buffer) => v.readInt32BE(0)
} as const;

const converters = [infoConverter, pressureConverter];

我不介意这样做,但我正在编写一个库,并且该库的用户正在提供该数组。因此,为了使库正常工作,我必须要求用户在使用const它时使用断言,这不是最佳的。

const对我来说,如果可以只向库提供他们的数据并且我可以自动进行断言,那就太好了。

所以我有这门课

class Service<C extends Converters> {
  private converters?: Converters;

  constructor(converters?: C) {
    this.converters = converters;
  }
}

我想知道是否有办法可以做这样的事情:

class Service<C extends Converters> {
  private converters?: EveryItemIsAConst<Converters>;

  constructor(converters?: C) {
    this.converters = converters as EveryItemIsAConst<C>;
  }
}

用户可以做

const infoConverter = {
  name: "info",
  uuid: "180a",
  decode: (v: Buffer) => v.toString()
};

const pressureConverter = {
  name: "pressure",
  uuid: "1810",
  decode: (v: Buffer) => v.readInt32BE(0)
};

const converters = [infoConverter, pressureConverter];

const service = new Service(converters)

并且EveryItemIsAConst将确保as const应用于converters数组中的每个项目。

标签: typescript

解决方案


推荐阅读