如何检查打字稿+角度中的变量类型?
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)
它应该给true
和false
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您的帖子添加一些解释。以上是关于如何检查打字稿+角度中的变量类型?的主要内容,如果未能解决你的问题,请参考以下文章