有没有可能区分打字稿中的字符串和字符串枚举?

时间:2019-05-27 06:23:06

标签: typescript

所以我有

type newType = ResourcesKey | string;

enum ResourcesKey {    
    FirstString= 'path',
    ...
    }

然后我有一个接受实例的函数,我想测试它是字符串还是枚举,但是在打字稿中,这两个被认为是相同的吗?

Function(instance: newType)
{
   if (instance instanceof ResourcesKey) {

   }
}

这将返回错误 错误TS2359:“ instanceof”表达式的右侧必须为“ any”类型或可分配给“ Function”接口类型的类型。

我可以做些什么来将实例与枚举类型进行比较吗?

例如在C#中,我可能可以做类似的事情

if (typeof (instance) == ResourcesKey) {
}

我当然可以解决它,但是我想知道首选的行动方案是什么

1 个答案:

答案 0 :(得分:1)

sshHook = SSHHook(ssh_conn_id='my_conn_id',keepalive_interval=240) task_ssh_bash = """ cd ~/projects && JID=$(sbatch myjob.sh) echo $JID sleep 10s # needed ST="PENDING" while [ "$ST" != "COMPLETED" ] ; do ST=$(sacct -j ${JID##* } -o State | awk 'FNR == 3 {print $1}') sleep 1m if [ "$ST" == "FAILED" ]; then echo 'Job final status:' $ST, exiting... exit 122 fi echo $ST """ task_ssh = SSHOperator( task_id='test_ssh_operator', ssh_hook=sshHook, do_xcom_push=True, command=task_ssh_bash, dag=dag) 仍然只适用于类,因此您不能将其与枚举一起使用。

运行时枚举只是字符串,因此对此进行测试意味着实际测试字符串值是否在枚举中。您可以创建一个自定义的typeguard,它将进行检查并通知编译器该类型:

instanceof