在 C# 中你可以做这样的事情:
string typeName = typeof(int).FullName;
并且
typeName
的值将是 System.Int32
。 (参考这个问题供参考)。
所以,我的问题是,如何在 JavaScript 或 TypeScript 中实现同样的效果?
请注意,我不想从
object
获取类型名称,我只想从类型中获取它,就像上面的示例代码一样。
在Javascript中你可以使用
typeof variable_name
我刚刚发现 Node.js 中的 type-name 包可以解决这个问题。
为了在运行时实现更强的输入,您可以使用 Accelatrix:
https://www.nuget.org/packages/Accelatrix
https://www.npmjs.com/package/accelatrix
https://github.com/accelatrix/accelatrix
JavaScript 的类型系统得到增强,包括四个基本操作:
- GetHashCode()
- GetType()
- Equals()
- ToString()
您现在可以像在 C# 中一样在运行时处理 JavaScript 中的类,例如:
var myDog = new Bio.Mammal(8);
var myCat = new Bio.Feline(8, 9);
var timeIsSame = (new Date()).Equals(new Date()); //true
var areEqual = myDog.Equals(myCat); // false
var myCatType = myCat.GetType(); // Bio.Feline
var myCatBaseType = myCat.GetType().BaseType; // Bio.Mammal
var isAnimal = myCat.GetType().IsAssignableFrom(Bio.Animal); // true
var enums = Bio.TypesOfLocomotion.GetType(); // Accelatrix.EnumType
// 示例类:
export namespace Bio
{
export enum TypesOfLocomotion
{
Crawl,
Swim,
Walk,
Fly,
}
abstract class LivingBeing
{
public isExtinct = false;
}
export abstract class Eukaryotes extends LivingBeing
{
private locomotion: TypesOfLocomotion = null;
public get Locomotion(): TypesOfLocomotion
{
return this.locomotion;
}
public set Locomotion(value: TypesOfLocomotion)
{
this.locomotion = value;
}
}
export class Animal extends Eukaryotes
{
public isAnimal = true;
public constructor()
{
super();
}
}
export class Mammal extends Animal
{
private readonly numberOfTits: number;
public constructor(numberOfTits: number)
{
super();
this.numberOfTits = numberOfTits;
}
public get NumberOfTits(): number
{
return this.numberOfTits;
}
public SayHello(): string
{
return "Hello";
}
}
export class Feline extends Mammal
{
private readonly numberOfLives: number;
public constructor(numberOfTits: number, numberOfLives: number)
{
super(numberOfTits);
this.numberOfLives = numberOfLives == null ? 9 : numberOfLives;
this.Locomotion = TypesOfLocomotion.Walk;
}
public get NumberOfLives(): number
{
return this.numberOfLives;
}
}
}
var 类型名称 = 5;
这样你就可以在 javascript 中添加一个简单的警报。
例如,
alert(typeof typeName);
仅此而已。