source

유형 스크립트에서 문자열 변수를 문자열 리터럴 유형으로 캐스트하는 방법

manysource 2023. 6. 14. 21:56

유형 스크립트에서 문자열 변수를 문자열 리터럴 유형으로 캐스트하는 방법

Typescript에서 다음과 같은 서명을 가진 함수를 호출한다고 가정합니다.

function foo(param: "TRUE"|"FALSE"|"NONE")

내가 어떻게...

var str = runtimeString()
if(str === "TRUE" | str === "FALSE" | str === "NONE")
    foo(str)

아니면, 명시적인 값이 유일한 방법입니다.

var str = runtimeString()
if(str === "TRUE")
    foo("TRUE")
else if(str === "FALSE" )
    foo("FALSE")
else if(str === "NONE")
    foo("NONE")

다음과 같이 문자열 리터럴 유형을 만듭니다.

type NullableBoolean = "TRUE" | "FALSE" | "NONE";

함수 정의에서 다음 유형을 사용합니다.param:

function foo(param: NullableBoolean)
{
    ...
}

문자열을 문자열 리터럴 유형으로 캐스트해야 합니다.

var str = runtimeString();
if(str === "TRUE" || str === "FALSE" || str === "NONE")
    foo(<NullableBoolean>str);

런타임 문자열이 유효한 옵션 중 하나인지 확인하는 경우 문자열 리터럴 유형을 예상하는 함수 유형에 문자열을 캐스팅하면 됩니다.

type Tristate =  "TRUE"|"FALSE"|"NONE";

function foo(param: Tristate) {
    return "enhanced: " + param;
}

let validInput = "NONE";
foo(validInput as Tristate);

캐스트를 수행하는 또 다른 방법은 다음과 같이 유형을 추가하는 것입니다.

foo(<Tristate> validInput);

런타임 문자열의 데이터에 대한 컴파일러의 의견을 무시합니다.따라서 런타임에 정의된 세 개의 문자열 이외의 값이 당신에게 들어갈 가능성이 있습니다.foo기능.

내가 찾은 가장 좋은 방법은 타입 가드를 만드는 것이었습니다.

type NullableBoolean = "TRUE" | "FALSE" | "NONE";
function foo(param: NullableBoolean)
{
    ...
}

function isNullableBool(str: string): str is NullableBoolean
{
    return str === "TRUE" || str === "FALSE" || str === "NONE"
}

if(isNullableBool(str)) { foo(str); }

값 목록을 반복해야 하지만 브렛의 답변보다 더 나은 캡슐화를 얻을 수 있기 때문에 이상적이지 않습니다.

언급URL : https://stackoverflow.com/questions/38524972/how-to-cast-a-string-variable-to-a-string-literal-type-in-typescript