如何描述具有动态名称的打字稿中的类型?

时间:2016-04-07 05:03:46

标签: javascript typescript angular

我想描述一种具有以下行为的类型

export class myData {
    key          : string;
    display_name : string;  
}

但是我希望keydisplay_name的动态名称包含我提供的实际密钥和display_name

例如。以下是有效的myData类型

mySample1:myData =
{ 
    myKey    : 'myKeyValue'
    myName   : 'myNameValue'
}

mySample1:myData =
{ 
    myKey2    : 'myKeyValue2'
    myName2   : 'myNameValue2'
}

这样做的动机是我有很多来自API的数据,它返回一个具有相同密钥数且每个密钥具有相同类型值的对象列表。但问题是每个数据都有不同的密钥名称。

我想在angular2中创建一个Component,它只获取具有一定数量键的对象列表,并且每个键的值必须是某种类型。

例如,我不希望我的Component采取

var test =
{ 
    myKey2    : 1
    myName2   : 'myNameValue2'
}

var test2 =
{ 
    myKey2    : 'myNameValue1'
    myName2   : 'myNameValue2'
    mySomeOtherKey : 'myNameValue10'
}

打字稿有可能吗?如果有可能,这是打字稿中的一个好主意吗?

1 个答案:

答案 0 :(得分:1)

  

例如。以下是有效的myData类型

TypeScript是结构性的。由于您希望这两者都有效

mySample1:myData =
{ 
    myKey    : 'myKeyValue'
    myName   : 'myNameValue'
}

mySample1:myData =
{ 
    myKey2    : 'myKeyValue2'
    myName2   : 'myNameValue2'
}

您可以轻松地将myData声明为这两种类型的联盟

type MyData = {
    myKey: string;
    myName: string;
}
    | {
        myKey2: string;
        myName2: string;
    }

let mySample1: MyData =
    {
        myKey: 'myKeyValue',
        myName: 'myNameValue'
    }

mySample1 =
    {
        myKey2: 'myKeyValue2',
        myName2: 'myNameValue2'
    }