typescript/restrict-template-expressions 정확성
동작 방식
이 규칙은 템플릿 리터럴 표현식에서 허용되는 타입을 제한합니다.
왜 좋지 않은가?
템플릿 리터럴은 삽입된 값에 대해 toString()을 호출합니다. 일부 타입은 의미 있는 문자열 표현이 없는 경우가 있습니다 (예: 객체는 "[object Object]"로 변환됨) 또는 toString 메서드 자체가 전혀 존재하지 않을 수도 있습니다. 이 규칙은 템플릿 표현식에서 적절한 타입만 사용되도록 보장하는 데 도움이 됩니다.
예시
이 규칙에 부적합한 코드 예시:
declare const obj: object;
declare const sym: symbol;
declare const fn: () => void;
declare const arr: unknown[];
// 객체는 "[object Object]"로 변환됨
const str1 = `값: ${obj}`;
// 심볼은 예상과 다를 수 있음
const str2 = `심볼: ${sym}`;
// 함수는 소스 코드나 "[Function]"으로 변환됨
const str3 = `함수: ${fn}`;
// 배열은 예상대로 포맷되지 않을 수 있음
const str4 = `배열: ${arr}`;
// undefined/null은 "undefined"/"null"로 변환되어 혼란스러울 수 있음
declare const maybeValue: string | undefined;
const str5 = `값: ${maybeValue}`; // "값: undefined"일 수 있음이 규칙에 적합한 코드 예시:
declare const str: string;
declare const num: number;
declare const bool: boolean;
declare const obj: object;
// 안전한 타입
const result1 = `문자열: ${str}`;
const result2 = `숫자: ${num}`;
const result3 = `불리언: ${bool}`;
// 복잡한 타입에 대한 명시적 변환
const result4 = `객체: ${JSON.stringify(obj)}`;
const result5 = `배열: ${arr.join(", ")}`;
// undefined/null을 명시적으로 처리
declare const maybeValue: string | undefined;
const result6 = `값: ${maybeValue ?? "N/A"}`;
const result7 = `값: ${maybeValue || "기본값"}`;
// 미확인 값에 대한 타입 가드
declare const unknown: unknown;
const result8 = typeof unknown === "string" ? `값: ${unknown}` : "유효하지 않음";구성
이 규칙은 다음 속성을 가진 구성 객체를 수락합니다.
allow
type: array
기본값: [{"from":"lib", "name":["Error", "URL", "URLSearchParams"]}]
템플릿 표현식에서 허용되는 추가 타입이나 값 지정자를 포함하는 배열입니다. 기본값으로 lib에서 제공하는 Error, URL, URLSearchParams가 포함됩니다.
allow[n]
type: string
특정 선언을 매칭하기 위한 타입 또는 값 지정자
다음 네 가지 유형의 지정자가 지원됩니다:
- 문자열 지정자 (사용 중단됨): 이름으로 전역 매칭
"Promise"- 파일 지정자: 로컬 파일에서 선언된 타입/값 매칭
{ "from": "file", "name": "MyType" }
{ "from": "file", "name": ["Type1", "Type2"] }
{ "from": "file", "name": "MyType", "path": "./types.ts" }- 라이브러리 지정자: TypeScript 내장 라이브러리 타입 매칭
{ "from": "lib", "name": "Promise" }
{ "from": "lib", "name": ["Promise", "PromiseLike"] }- 패키지 지정자: npm 패키지에서 가져온 타입/값 매칭
{ "from": "package", "name": "Observable", "package": "rxjs" }
{ "from": "package", "name": ["Observable", "Subject"], "package": "rxjs" }allowAny
type: boolean
기본값: true
템플릿 표현식에서 any 타입 값을 허용할지 여부.
allowArray
type: boolean
기본값: false
템플릿 표현식에서 배열 타입을 허용할지 여부.
allowBoolean
type: boolean
기본값: true
템플릿 표현식에서 불리언 타입을 허용할지 여부.
allowNever
type: boolean
기본값: false
템플릿 표현식에서 never 타입을 허용할지 여부.
allowNullish
type: boolean
기본값: true
템플릿 표현식에서 null 또는 undefined와 같은 nullish 타입을 허용할지 여부.
allowNumber
type: boolean
기본값: true
템플릿 표현식에서 숫자 및 bigint 타입을 허용할지 여부.
allowRegExp
type: boolean
기본값: true
템플릿 표현식에서 RegExp 값들을 허용할지 여부.
사용 방법
구성 파일 또는 CLI를 통해 이 규칙을 활성화하려면 다음을 사용하세요:
{
"rules": {
"typescript/restrict-template-expressions": "error"
}
}oxlint --type-aware --deny typescript/restrict-template-expressions