打字稿:为多种变量分配一种类型

时间:2020-09-14 13:45:40

标签: typescript types

我是TypeScript的新手,我得到了以下预定义类型:

from pptx.oxml.xmlchemy import OxmlElement

def SubElement(self, parent, tagname, **kwargs):
        element = OxmlElement(tagname)
        element.attrib.update(kwargs)
        parent.append(element)
        return element

def _set_cell_border(self, cell, border_color="#230E38", border_width='12700'):
        tc = cell._tc
        tcPr = tc.get_or_add_tcPr()

        # Left Cell Border
        lnL = self.SubElement(tcPr, 'a:lnL', w='3175', cap='flat', cmpd='sng', algn='ctr')
        lnL_solidFill = self.SubElement(lnL, 'a:solidFill')
        lnL_srgbClr = self.SubElement(lnL_solidFill, 'a:srgbClr', val=border_color)
        lnL_prstDash = self.SubElement(lnL, 'a:prstDash', val='solid')
        lnL_round_ = self.SubElement(lnL, 'a:round')
        lnL_headEnd = self.SubElement(lnL, 'a:headEnd', type='none', w='med', len='med')
        lnL_tailEnd = self.SubElement(lnL, 'a:tailEnd', type='none', w='med', len='med')

        # Right Cell Border
        lnR = self.SubElement(tcPr, 'a:lnR', w='3175', cap='flat', cmpd='sng', algn='ctr')
        lnR_solidFill = self.SubElement(lnR, 'a:solidFill')
        lnR_srgbClr = self.SubElement(lnR_solidFill, 'a:srgbClr', val=border_color)
        lnR_prstDash = self.SubElement(lnR, 'a:prstDash', val='solid')
        lnR_round_ = self.SubElement(lnR, 'a:round')
        lnR_headEnd = self.SubElement(lnR, 'a:headEnd', type='none', w='med', len='med')
        lnR_tailEnd = self.SubElement(lnR, 'a:tailEnd', type='none', w='med', len='med')

        # Top Cell Border
        lnT = self.SubElement(tcPr, 'a:lnT', w='3175', cap='flat', cmpd='sng', algn='ctr')
        lnT_solidFill = self.SubElement(lnT, 'a:solidFill')
        lnT_srgbClr = self.SubElement(lnT_solidFill, 'a:srgbClr', val=border_color)
        lnT_prstDash = self.SubElement(lnT, 'a:prstDash', val='solid')
        lnT_round_ = self.SubElement(lnT, 'a:round')
        lnT_headEnd = self.SubElement(lnT, 'a:headEnd', type='none', w='med', len='med')
        lnT_tailEnd = self.SubElement(lnT, 'a:tailEnd', type='none', w='med', len='med')

        # Bottom Cell Border
        lnB = self.SubElement(tcPr, 'a:lnB', w='3175', cap='flat', cmpd='sng', algn='ctr')
        lnB_solidFill = self.SubElement(lnB, 'a:solidFill')
        lnB_srgbClr = self.SubElement(lnB_solidFill, 'a:srgbClr', val=border_color)
        lnB_prstDash = self.SubElement(lnB, 'a:prstDash', val='solid')
        lnB_round_ = self.SubElement(lnB, 'a:round')
        lnB_headEnd = self.SubElement(lnB, 'a:headEnd', type='none', w='med', len='med')
        lnB_tailEnd = self.SubElement(lnB, 'a:tailEnd', type='none', w='med', len='med')

在我的脚本中,我有大量使用此类型的变量:

type SC = StyledComponent<any, any>;

有没有更好的方式编写这些内容?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果要定义大量具有相同类型的变量,通常这表明您需要为它们提供更好的类型,或者进行重构并将其分解。

使用<any, any>,您将失去Typescript的大部分好处。 为什么不以正确的方式定义每个变量,那么它们将不会都是相同的模糊any类型?

此外,您可以通过创建一种新类型来稍稍帮助自己-通过重新排列列表,我可以看到它可以像这样分组:

    StyledLabelSide!: SC;
    StyledLabelRatio!: SC;
    StyledLabelAngle!: SC;
    StyledLabelSpeed!: SC;

    StyledInputSide!: SC;
    StyledInputRatio!: SC;
    StyledInputAngle!: SC;
    StyledInputSpeed!: SC;

    StyledRangeSide!: SC;
    StyledRangeRatio!: SC;
    StyledRangeAngle!: SC;
    StyledRangeSpeed!: SC;

您可以使用字段sideratioanglespeed来定义对象的类型,然后可以定义三个变量({{1 }},StyledLabelStyledInput),而不是十二。