programing

유형 스크립트의 유형 오류

abcjava 2023. 6. 25. 18:11
반응형

유형 스크립트의 유형 오류

여기 내 문제가 있습니다.다음 오류가 발생했습니다.

Uncaught TypeError: 개체 프로토타입은 개체이거나 null일 수 있습니다. 정의되지 않았습니다.

export abstract class AbstractLogicExpression {
    protected _logicChildExpressions: AbstractLogicExpression[] = Array();
    protected _precedence = 0;
    protected _parsed = false;
    protected _expressionType = "";

    protected rightAssociative = false;

    public toDNF() {
        for (let i = 0; i < this.logicChildExpressions.length; i++) {
            let actualLogicExpression: AbstractLogicExpression = this.logicChildExpressions[i];

            if (actualLogicExpression._expressionType == "~") {

                let logicConjunction = actualLogicExpression.logicChildExpressions[0];

                let var1 = logicConjunction.logicChildExpressions[0];
                let var2 = logicConjunction.logicChildExpressions[1];

                if (logicConjunction._expressionType == "*") {
                    actualLogicExpression.logicChildExpressions[0] = new LogicOr();
                    //actualLogicExpression.logicChildExpressions[0].add(new LogicNeg(var1));
                    //actualLogicExpression.logicChildExpressions[0].add(new LogicNeg(var2));
                }
            }
        }
    }
}

주석이 달린 두 줄 앞에 있는 줄 때문에 이 오류가 발생합니다.

actualLogicExpression.logicChildExpressions[0] = new LogicOr();

오류 메시지에 라인 번호가 표시되지 않기 때문에 코멘트 및 코멘트 해제로 테스트했습니다.

누가 내가 뭘 할 수 있는지 알아요?코드가 조금 더 필요하다면요.제가 글을 올릴 수 있어요...

LogicOr의 코드는 https://pastebin.com/T28Zjbtb 입니다.

여기에 순환 종속성에 대한 실제 문제는 리소스가 사용되기 전에 로드되지 않은 리소스 중 하나이기 때문입니다.리소스가 잘못 로드된 경우에도 이 오류가 발생합니다.

gulp를 사용하여 컴파일하는 이 예를 생각해 보십시오.

// File Parent.ts
export class Parent {
    public prop: string = "prop";
}
//File Child.ts
export class Child extends Parent {
    public prop2: string = "prop2";
}

그리고 편집할 수 있는 한 모금.

gulp.task('compile-js', function () {
return gulp.src(['code/Child.js', 'code/Parent.js'])
    .pipe(sourcemaps.init())
    .pipe(concat('app.bundle.js'))
    .pipe(sourcemaps.write())
    .pipe(gulp.dest('app/build'));
});

출력 파일 app.bundle.js는 "Uncaught TypeError: Object prototype은 Object 또는 null: defined"로 오류를 표시합니다. 이는 부모 클래스가 로드되기 전에 결과 코드가 먼저 자식 클래스(부모 클래스에 종속성이 있음)의 생성을 실행하기 때문입니다.

만약 당신이 결과 자바스크립트를 본다면 당신은 다음을 얻을 것입니다:

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var Child = /** @class */ (function (_super) {
    __extends(Child, _super);
    function Child() {
        var _this = _super !== null && _super.apply(this, arguments) || this;
        _this.prop2 = "prop2";
        return _this;
    }
    return Child;
}(Parent));
var Parent = /** @class */ (function () {
    function Parent() {
        this.prop = "prop";
    }
    return Parent;
}());

이를 실행하면 다음과 같은 이점을 얻을 수 있습니다.

Uncatched TypeError: 개체 프로토타입은 Object이거나 null일 수 있습니다. setPrototypeOf ()에서 정의되지 않았습니다.

이 문제를 해결하려면 gulp 파일의 리소스 순서나 페이지에 대한 Javascript를 준비하거나 로드하는 데 사용하는 방법을 변경하기만 하면 됩니다.

return gulp.src(['code/Parent.js', 'code/Child.js'])

이 문제를 해결할 수 있는 방법은 여러 가지가 있습니다. 이는 문제를 이해하고 문제를 해결하는 데 도움이 되는 예입니다.문제를 해결하기 위한 어떤 방법을 찾든 결국 오류는 실행 시 아직 지시하지 않은 작업을 자바스크립트 엔진에 요청하는 것입니다.

이게 도움이 되길 바래, 건배

다음 행에 오류가 표시됩니다.

realLogicExpression.logicChildExpressions[0] = newLogicOr();

오류 메시지는 다음과 같습니다.

Uncaught TypeError: 개체 프로토타입은 개체이거나 null일 수 있습니다. 정의되지 않았습니다.

클래스와 클래스 작동 방식에 익숙해지면 매우 쉽게 이해할 수 있습니다(https://basarat.gitbooks.io/typescript/docs/classes.html) .

오류는 다음을 의미합니다.new LogicOr하는 이유는 실하는이 때문입니다.LogicOr무언가를 확장하는 것입니다.undefined 예: 간한예단:

let Bar; 
class Foo extends Bar { } // Uncaught TypeError: Object prototype may only be an Object or null: undefined

에서 버그 LogicOr그리고 그 상속 사슬.

Javascript와할, 여러분에게 이 될 : 을 고친 은 자크스립영위해절망적행인한불이혼것바큼여도, 은에게분러움될이것것만:▁an▁for▁to▁out▁create▁it다니▁is▁what,것▁fixed입▁this▁for는▁souls▁you:▁unfortun▁desperate▁there▁might만▁help드▁with▁theascript▁jav자바을▁have▁enough▁to.index.ts클래스를 올바른 순서로 내보낸 다음 상대 경로가 아닌 인덱스 파일에서 모든 가져오기를 수행하는 클래스입니다.파일은 다음과 같습니다.

export { default as BasePage } from './BasePage' // abstract class
export { default as ProtectedAppPage } from './ProtectedAppPage' // abstract extending BasePage class
export { default as RegistrationForm } from './registration/forms/RegistrationForm' // abstract class extending ProtectedAppPage

export { default as ForgotPasswordPage } from './authentication/ForgotPasswordPage' // concrete class extending BasePage
export { default as HomeAddressForm } from './registration/forms/HomeAddressForm' // concrete class extending RegistrationForm
export { default as MfaPage } from './authentication/MfaPage' // concrete class extending ProtectedAppPage

이제 수입품을 살펴보도록 하겠습니다.

// before
import HomeAddressForm from './registration/forms/HomeAddressForm'
// after
import HomeAddressForm from './index'

이러한 변화는 저에게 그것을 해결하기에 충분했습니다.

언급URL : https://stackoverflow.com/questions/44421810/typeerror-in-typescript

반응형