형식 스크립트에서 변수 이름 가져오기
유형 스크립트에서 변수 이름을 가져오려면 어떻게 해야 합니까?저는 다음과 같은 것을 원합니다.
var name = "Foo";
alert(getVariableName(name)); //Prints "name"
basarat의 답변을 확장하여 변수에 대한 액세스를 포함하는 함수를 매개 변수로 사용하는 함수를 만들어야 합니다.자바스크립트에서는 어떤 함수의 코드에도 접근할 수 있기 때문에 정규식을 사용하여 변수 이름을 추출하는 것이 간단한 문제가 됩니다.
var varExtractor = new RegExp("return (.*);");
export function getVariableName<TResult>(name: () => TResult) {
var m = varExtractor.exec(name + "");
if (m == null) throw new Error("The function does not contain a statement matching 'return variableName;'");
return m[1];
}
var foo = "";
console.log(getVariableName(() => foo));
한 가지 접근 방식은 이러한 값을 객체에 저장하는 것입니다.
var o = {
firstName: "Homer",
lastName: "Simpson"
};
이름을 알 수 없습니다.o
그러나 다음과 같은 두 가지 속성의 이름(또는 "키")을 얻을 수 있습니다.
var k = Object.keys(o);
console.log(k[0]); // prints "firstName"
Cernicova-Dragomir의 답변 확장:
basarat의 답변을 확장하여 변수에 대한 액세스를 포함하는 함수를 매개 변수로 사용하는 함수를 만들어야 합니다.자바스크립트에서는 어떤 함수의 코드에도 접근할 수 있기 때문에 정규식을 사용하여 변수 이름을 추출하는 것이 간단한 문제가 됩니다.
개체의 필드도 지원합니다.
var varExtractor = new RegExp("(.*)");
export function getVariableName<TResult>(getVar: () => TResult) {
var m = varExtractor.exec(getVar + "");
if (m == null)
throw new Error("The function does not contain a statement matching 'return variableName;'");
var fullMemberName = m[1];
var memberParts = fullMemberName.split('.');
return memberParts[memberParts.length-1];
}
var foo = { bar: "" };
var varName = getVariableName(() => foo.bar ); //prints "bar"
ES6를 대상으로 할 때 Node.js에서 작동하지 않기 때문에 "반환"을 삭제했습니다.
TypeScript는 런타임에 JavaScript입니다.따라서 거기에 적용되는 것과 같은 제한이 적용됩니다: 자바스크립트에서 변수의 '이름'을 가져옵니다.
하지만 당신은 다음과 같은 것들을 할 수 있습니다.
alert(getVariableName(()=>name))
여기서 getVariableName으로 전달된 함수의 본문을 구문 분석하고 문자열로 가져옵니다.
//typescript
function getVarName(obj: object): string {
const keys = Object.keys(obj);
console.assert(keys.length == 1, 'key count must be 1');
return keys[0];
}
const simpleName = 123;
console.log(getVarName({ simpleName }), simpleName);
또는
//javascript
"use strict";
function getVarName(obj) {
const keys = Object.keys(obj);
console.assert(keys.length == 1, 'key count must be 1');
return keys[0];
}
const simpleName = 123;
console.log(getVarName({ simpleName }), simpleName);
출력됩니다.
[LOG]: 단순 이름, 123
하지만 저는 그것이 런타임 대신 컴파일 시간에 끝나야 한다고 생각합니다.
변수가 클래스/인터페이스의 일부인 경우, 다음과 같은 간단한 해결책이 있습니다.
function getFieldName<T, K extends keyof T = keyof T>(name: K): K {
return name;
}
예.const name = getFieldName<SomeInterface>('some_field')
컴파일 시간 보증을 제공합니다.name
포함하다'some_field'
,그리고.some_field
의 유효한 필드입니다.SomeInterface
.
언급URL : https://stackoverflow.com/questions/29191451/get-name-of-variable-in-typescript
'programing' 카테고리의 다른 글
Azure 스토리지에서 ABFSS와 WASBS의 차이점은 무엇입니까? (0) | 2023.06.19 |
---|---|
ASP.NET 5, .NET Core 및 ASP.NET Core 5의 차이점은 무엇입니까? (0) | 2023.06.19 |
유형 오류: 어레이에서 속성 1을 추가할 수 없습니다. 개체를 확장할 수 없습니다.푸시() (0) | 2023.06.19 |
SQL Server 인스턴스의 데이터 디렉토리를 찾는 방법은 무엇입니까? (0) | 2023.06.19 |
When should I use fputs instead of fprintf? (0) | 2023.06.19 |