gpt4 book ai didi

javascript - 如何使此 typescript 映射功能不那么复杂?

转载 作者:行者123 更新时间:2023-11-30 20:06:43 25 4
gpt4 key购买 nike

我正在尝试在一些已知值与其他一些已知值之间做一个非常简单的映射。这段代码的一切都让人尖叫,我错过了 typescript 可以做的一些简单的事情。

type PortInfoProp = 'comName' | 'manufacturer' | 'serialNumber' | 'vendorId' | 'productId' | 'pnpId'

interface LinuxPort extends PortInfo {}

interface PropNames {
readonly DEVLINKS: PortInfoProp
readonly DEVNAME: PortInfoProp
readonly ID_MODEL_ID: PortInfoProp
readonly ID_SERIAL_SHORT: PortInfoProp
readonly ID_VENDOR_ENC: PortInfoProp
readonly ID_VENDOR_ID: PortInfoProp
}

type PropName = keyof PropNames

function propName(name: PropName): PortInfoProp | null {
const map: PropNames = {
DEVNAME: 'comName',
ID_VENDOR_ENC: 'manufacturer',
ID_SERIAL_SHORT: 'serialNumber',
ID_VENDOR_ID: 'vendorId',
ID_MODEL_ID: 'productId',
DEVLINKS: 'pnpId',
}
return map[name] || null
}

最佳答案

我要做的第一件事是将 map 移到函数之外;无需在每次调用时重新创建它。然后您可以将映射声明为字典:

type PropName = 'DEVNAME' | 'ID_VENDOR_ENC' | 'ID_SERIAL_SHORT' | 'ID_VENDOR_ID' | 'ID_MODEL_ID' | 'DEVLINKS';
type PortInfoProp = 'comName' | 'manufacturer' | 'serialNumber' | 'vendorId' | 'productId' | 'pnpId';

type PropertyMapping = { [key in PropName]: PortInfoProp };

const map: PropertyMapping = {
DEVNAME: 'comName',
ID_VENDOR_ENC: 'manufacturer',
ID_SERIAL_SHORT: 'serialNumber',
ID_VENDOR_ID: 'vendorId',
ID_MODEL_ID: 'productId',
DEVLINKS: 'pnpId',
}

function propName(name: PropName): PortInfoProp | null {
return map[name] || null
}

编辑:

如果您不关心映射键/值的命名类型,则更简洁:

const map = {
DEVNAME: 'comName',
ID_VENDOR_ENC: 'manufacturer',
ID_SERIAL_SHORT: 'serialNumber',
ID_VENDOR_ID: 'vendorId',
ID_MODEL_ID: 'productId',
DEVLINKS: 'pnpId',
}

type PropMapping = typeof map;

function propName<K extends keyof PropMapping>(name: K): PropMapping[K] | null {
return map[name] || null
}

关于javascript - 如何使此 typescript 映射功能不那么复杂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52845673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com