如何检查打字稿+角度中的变量类型?

Posted

技术标签:

【中文标题】如何检查打字稿+角度中的变量类型?【英文标题】:how to check type of variable in typescript +angular? 【发布时间】:2018-12-13 21:09:21 【问题描述】:

您能告诉我如何在 typescript + angular 中检查变量的 typeof 吗?

import  Component  from '@angular/core';

interface Abc 
  name : string

@Component(
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
)
export class AppComponent  
  name = 'Angular 6';
  a:Abc= 
  name:"sss"
  

  constructor()
    console.log(typeof this.a)
   // console.log(this.a instanceof Abc) 
  

它应该给truefalse

https://stackblitz.com/edit/angular-jfargi?file=src/app/app.component.ts

【问题讨论】:

Why does 'instanceof' in TypeScript give me the error "'Foo' only refers to a type, but is being used as a value here."?的可能重复 对于true / false,您必须根据某个值检查它 【参考方案1】:

只需使用typeof(variable); 所以在你的情况下:

console.log(typeof(this.a));

【讨论】:

【参考方案2】:

接口在运行时被擦除,因此在任何运行时调用中都没有接口的痕迹。您可以使用类而不是接口(类在运行时存在并遵守instanceof

class Abc 
    private noLiterals: undefined;
    constructor(public name: string)  

@Component(
    selector: 'my-app',
    templateUrl: './app.component.html',
    styleUrls: ['./app.component.css']
)
export class AppComponent 
    name = 'Angular 6';
    a: Abc = new Abc( "sss")

    constructor() 
        console.log(this.a instanceof Abc) // Will be true 
    

或者您可以进行结构检查以查看 Abc 的属性在运行时是否存在于对象中:

export class AppComponent 
    name = 'Angular 6';
    a: Abc =  name: "sss" 

    constructor() 
        console.log('name' in this.a) // Will be true 
    

【讨论】:

不测试'name' in this.a,给定this.a遵循一个接口,可以:const myInterface = this.a as MyInterface; console.log(myInterface.name)【参考方案3】:

接口 仅在编译时存在,在编译后被删除,因此代码在运行时毫无意义。如果您尝试这样做,它将始终返回false

看这里-

constructor()
    console.log(typeof(this.a), '---');
    console.log(this.instanceOfA(this.a)); 
  

  instanceOfA(object: any): object is ABc 
    return 'member' in object;
  

Working Example

更多详情请参考这里-

https://***.com/a/46703380/5043867

【讨论】:

【参考方案4】:

试试 'instanceof' 或 'is':

a instanceof Abc;

另请参阅: Class type check with typescript

【讨论】:

【参考方案5】:

对于基本类型(字符串、数字等),您可以这样检查:

if( typeof(your_variable) === 'string' ) ...

【讨论】:

【参考方案6】:

试试这个

  console.log(typeof (this.specialProviderSelected));

我们可以检查变量的类型,如字符串、数字、对象等

  if((typeof (this.specialProviderSelected)) === 'string') 
     action here...
    
   if((typeof (this.specialProviderSelected))  === 'number') 
     action here...
    
    if((typeof (this.specialProviderSelected))  === 'object') 
     action here...
    

【讨论】:

只有代码的答案几乎总是可以通过添加一些关于它们的工作方式和原因的解释来改进。 下一次,我会尽量给出答案和解释。谢谢你 现在,您可以只edit您的帖子添加一些解释。

以上是关于如何检查打字稿+角度中的变量类型?的主要内容,如果未能解决你的问题,请参考以下文章

使用键值管道进行打字稿类型检查

如何以角度(打字稿)从浏览器获取客户端IP地址

带有打字稿的角度材料设计

如何在打字稿中键入枚举变量?

打字稿中的通用对象类型

打字稿接口变量空检查并设置默认值