如何在typescript中描述具有动态名称的类型

How do I describe the a type in typescript that has dynamic name?

本文关键字:动态 类型 typescript 描述      更新时间:2024-03-04

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

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

然而,我希望keydisplay_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'
}

这可能是打字稿吗?如果可能的话,这是打字的好主意吗?

例如。以下是有效的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'
    }