TypeScript에서 빈 개체 유형 정의
값을 포함할 수 없는 빈 개체 유형을 정의하는 방법을 찾고 있습니다.
type EmptyObject = {}
const MyObject: EmptyObject = {
thisShouldNotWork: {},
};
유형이 지정된 개체는 속성을 추가할 수 있습니다.어떻게 해야 합니까?MyObject대신에 항상 빈 물체가 되는 것?
실제 사용 사례는 인터페이스 내부의 EmptyObject 유형을 사용하는 것입니다.
interface SchemaWithEmptyObject {
emptyObj: EmptyObject;
}
type EmptyObject = {
[K in any] : never
}
const one: EmptyObject = {}; // yes ok
const two: EmptyObject = {a: 1}; // error
우리가 여기서 말하는 것은 우리의 모든 궁극적인 특성이EmptyObject뿐일 수 있습니다never그리고 로서never표현 값이 없으므로 이러한 속성을 만들 수 없으므로 개체는 빈 상태로 유지됩니다. 이 방법이 컴파일 오류 없이 개체를 만들 수 있는 유일한 방법이기 때문입니다.
type EmptyObject = Record<any, never>
이것은 Maciej Sikora의 답변과 동일하지만 Record 유틸리티 유형을 사용합니다.
VSC linter에 따름type emtyObj = Record<string, never>.
빈 개체 유형을 정의하는 몇 가지 옵션이 있으며 속성에 액세스하거나 설정할 때 린터 및 유형 스크립트 오류와 관련하여 원하는 부작용에 따라 완전히 달라집니다.제가 시도한 옵션은 다음과 같습니다.
// Option A:
let objA: Record<any, never> = {}; // Typescript-ESLint error: Unexpected any. Specify a different type.
objA = { prop: 'value' }; // Typescript error: Type 'string' is not assignable to type 'never'.
console.log(objA.prop);
console.log(objA.nonExistingProp); // No error!!!
// Option B:
let objB: Record<string, never> = {};
objB = { prop: 'value' }; // Typescript error: Type 'string' is not assignable to type 'never'.
console.log(objB.prop);
console.log(objB.nonExistingProp); // No error!!!
// Option C:
let objC: Record<never, never> = {};
objC = { prop: 'value' };
console.log(objC.prop); // Typescript error: Property 'prop' does not exist on type 'Record<never, never>'
console.log(objC.nonExistingProp); // Typescript error: Property 'nonExistingProp' does not exist on type 'Record<never, never>'.
TLDR: 빈 개체에 속성을 설정할 때 오류가 발생합니다. Record<never, never> 빈 개체의 속성에 액세스할 때 오류가 발생합니다.두 경우 모두 오류를 일으킬 수 있는 해결책을 아직 찾지 못했습니다.
개인적으로 저는 빈 개체의 속성에 액세스하려고 하면 오류가 발생하기를 원했기 때문에 현재 사용 사례에 대한 옵션 C를 선택했습니다. 하지만 당신은 원하지 않을 수도 있습니다!
개인 기호가 있는 이런 것은 어떻습니까?
// EmptyType.ts
const EMPTY_SYMBOL = Symbol();
export type EmptyType = {[EMPTY_SYMBOL]?: never};
교차로 결합 유형에 대해 올바르게 작동합니다.
import {EmptyType} from "./EmptyType";
type Union = EmptyType | { id: string };
const a: Union = {};
const b: string = a.id; // <-- error
언급URL : https://stackoverflow.com/questions/60111963/define-an-empty-object-type-in-typescript
'programing' 카테고리의 다른 글
| Python에서 개체의 정규화된 클래스 이름 가져오기 (0) | 2023.06.07 |
|---|---|
| Node.js + TypeScript:스크립트 컴파일 코드 형식의 구문이 분명하지 않습니다. (0) | 2023.06.07 |
| JPA에서 TINYINT 열 유형 생성 (0) | 2023.06.07 |
| (방콜론) Angular 표기법 (0) | 2023.06.07 |
| db에서 데이터를 가져오고 viewify 데이터 테이블을 채울 때 items.dll을 찾을 수 없습니다. (0) | 2023.06.07 |