【问题标题】:Default imports with TypeScript使用 TypeScript 的默认导入
【发布时间】:2016-07-10 20:59:47
【问题描述】:

使用 tsc 1.8.9...为什么这些导入不起作用?我以为 TypeScript 实现了 ES6 模块语法?

“类/person.ts”

export default class Person {
    protected _name: string;
    protected _language: string;

    constructor(name: string) {
        this._name = name;

        this.hello();
    }

    public hello() {
        console.log("Hello, " + this._name);
        console.log("Lang: " + this._language);
    }
}

“类/englishman.ts”

import Person from "person"

export default class Englishman extends Person {
    constructor(name: string){
        this._language = "en_GB";

        super(name);
    }
}

“main.ts”

import * as $ from "jquery";
import Englishman from "classes/englishman";

let tom: Person = new Englishman("Tom");
console.log(tom);


$("body").html(`<h1>TEST</h1>`);

错误:

source/main.ts(2,24): 错误 TS2307: 找不到模块 '课程/英语'。源/main.ts(4,10):错误 TS2304:找不到 名称“人”。 [13:53:43] TypeScript:2 个语义错误

【问题讨论】:

    标签: module typescript ecmascript-6


    【解决方案1】:

    经过一些更改后,它对我有用,在 ES5 和 ES6 中进行了测试。希望能帮到你:

    原创

    1. import Person from "classes/person";
    2. import Englishman from "classes/englishman";

    为了测试而改变

    1. import Person from './person';
    2. import Englishman from './classes/englishman';

    也许你需要检查你的目录树。

    添加

    1. import Person from './classes/person';

    .

    import Person from './person'; //<-- change
    
    export default class Englishman extends Person {
        constructor(name: string){
            this._language = "en_GB";
    
            super(name);
        }
    }
    

     export default class Person {
            protected _name: string;
            protected _language: string;
    
            constructor(name: string) {
                this._name = name;
    
                this.hello();
            }
    
            public hello() {
                console.log("Hello, " + this._name);
                console.log("Lang: " + this._language);
            }
        }
    

    import Englishman   from './classes/englishman'; //<-- change
    import Person       from './classes/person';     //<-- add
    
    class HelloWorld{
        public static main(){      
    
            let tom: Person = new Englishman("Tom");
            console.log(tom);
    
        }
    }
    HelloWorld.main();
    

    Hello, Tom
    Lang: en_GB
    Englishman { _language: 'en_GB', _name: 'Tom' }
    
    • tsc 版本 1.8.2
    • 节点 v5.4.1

    【讨论】:

    • 完美!添加./ 工作。我不知道为什么这应该是必要的,因为我认为从当前目录开始是给定的,除非我们从 / 开始......奇怪。
    【解决方案2】:

    确保你使用的是 ES6 目标编译,如果我没记错的话,ES5 仍然是默认目标。

    【讨论】:

    • 是的,我相信 ES5 是目标。我没有使用 Babel 或其他转译器,所以我相信它应该保留 ES5。
    猜你喜欢
    • 2018-10-14
    • 2022-12-07
    • 2016-06-19
    • 2019-04-03
    • 2017-11-12
    • 2020-04-30
    • 1970-01-01
    • 2021-06-01
    • 2017-02-01
    相关资源
    最近更新 更多