如何在typescript中导出数组

时间:2018-01-09 09:56:32

标签: angular typescript

在Angular4应用程序中,我使用一个服务来导出整个应用程序中使用的一些常量,枚举和接口。我想导出一个字符串数组,其键是anum中的键。这就是我现在所拥有的:

  <?php 
     $gridColumns = [
                    ['class' => 'yii\grid\SerialColumn'],
                    ['class' => 'yii\grid\CheckboxColumn'],             
                  ....
                    'name',             
                    'web_address',
                  ...
]; ?>

<?php
            echo GridView::widget([
                'tableOptions' => ['id' => 'companies_grid_table',
                'class' => 'table table-striped table-bordered table-hover'],
                'id'=> 'companies_grid_display',
                'dataProvider' => $dataProvider,
                'filterModel' => $searchModel,
                'columns' => $gridColumns,           
            ]); 
?>

我想根据上面枚举的值导出一个字符串数组,如下所示:

export enum ContextMenus {
  ... (more options)
  OBJECT_COLOR_RED = 120,
  OBJECT_COLOR_GREEN = 121,
  OBJECT_COLOR_BLUE = 122
}

我已尝试在论坛中使用let ObjectStyles : string[]; ObjectStyles[ContextMenus.OBJECT_COLOR_RED] = '#f00'; ObjectStyles[ContextMenus.OBJECT_COLOR_GREEN] = '#0f0' ObjectStyles[ContextMenus.OBJECT_COLOR_BLUE] = '#00f'; export ObjectStyles; // THIS IS WHAT I DON'T KNOW HOW TO WRITE ,但当我尝试从此类组件中导入时:

export default RulesStyles

编译器抱怨模块&#39; app-options.service没有导出的成员ObjectStyles&#39;。

另一个建议的解决方案是像这样导出ObjectStyles:

import { ContextMenus, ObjectStyles } from '../app-options.service';

在这种情况下,编译器不会抱怨,但应用程序在运行时崩溃并出现以下错误:

export { ObjectStyles };

我怎么能做我想做的事?谢谢!

2 个答案:

答案 0 :(得分:2)

我记得几周前我读过的有关计算属性作为数组键的内容。您必须将它们放在括号之间才能使其正常工作。所以,我可以使用这段代码做我想做的事情:

export var ObjectStyles = {
  [ContextMenus.OBJECT_COLOR_RED] : '#f00',
  [ContextMenus.OBJECT_COLOR_GREEN] : '#0f0',
  [ContextMenus.OBJECT_COLOR_BLUE] : '#00f'
};

这样做可以让我从应用程序的每个组件导入和使用ObjectStyles。

答案 1 :(得分:2)

您已经找到了问题的解决方案(万岁!),但我想提供一些关于原始代码无效的背景信息。让我们看看您尝试编译时收到的错误消息:

  

预期的声明或声明。

出现这种情况是因为您尝试导出文字表达式 ObjectStyles(评估对象)。除非您使用default导出,否则您无法执行此操作,因为否则不会附加任何名称。

相反,您必须导出一个声明,该声明会在程序中引入一个名称并可选择分配给它。这就是您在答案中所做的 - 您重新声明命名变量ObjectStyles,导出该变量,然后为其赋值。

您也可以修改原始示例:

// Personally I'd replace the 'let' with a 'const' here
// Also, it's worth noting that ObjectStyles is an object, not an array!
export let ObjectStyles = {};
ObjectStyles[ContextMenus.OBJECT_COLOR_RED] = '#f00';
ObjectStyles[ContextMenus.OBJECT_COLOR_GREEN] = '#0f0'
ObjectStyles[ContextMenus.OBJECT_COLOR_BLUE] = '#00f';

那就是说,你的版本更好 - 只是证明他们在功能上等同于:)