TS создает файл.d.ts, который является менее описательным

У меня есть этот вход в файл.ts:

export const OverSizedItems = <{ [key: string]: OverSizedItemType }>{

  NONE: {
    factor: 1,
    count: 0,
    mooversNeeded: 1,
  },

  ONE: {
    factor: 1.01,
    count: 1,
    mooversNeeded: 4,
  },

  TWO: {
    factor: 1.03,
    count: 2,
    mooversNeeded: 4,
  },

  THREE_PLUS: {
    factor: 1.07,
    count: 5,
    mooversNeeded: 6,
  }

};

это переносится на это:

export declare const OverSizedItems: {
    [key: string]: OverSizedItemType;
};

но если изменить оригинал и не указывать информацию о типе подписи индекса, я получу следующее: это больше, чем я ищу:

export declare const OverSizedItems: {
    NONE: {
        factor: number;
        count: number;
        mooversNeeded: number;
    };
    ONE: {
        factor: number;
        count: number;
        mooversNeeded: number;
    };
    TWO: {
        factor: number;
        count: number;
        mooversNeeded: number;
    };
    THREE_PLUS: {
        factor: number;
        count: number;
        mooversNeeded: number;
    };

};

перечисление не будет работать здесь, потому что перечисление не может указывать на объекты.

Итак, что я могу сделать, чтобы добавить подпись индекса, но сохранить все значения?

1 ответ

Лучшее, что я мог придумать, это использовать Record type со всеми ключами, записанными в объединении, вот так:

type OverSizedItemKey = "NONE" | "ONE" | "TWO" | "THREE_PLUS"

export const OversizedItems: Record<OverSizedItemKey, OverSizedItemType> = {
  // ...
}

Record использует сопоставленный тип, поэтому убедитесь, что вы знакомы с этим, чтобы знать, как и почему это работает.

Другие вопросы по тегам