1. amd
    2. commonjs
    3. ……
    1. // IShape.ts
    2. export interface IShape {
    3. draw();
    4. }
    1. // Circle.ts
    2. import shape = require("./IShape");
    3. export class Circle implements shape.IShape {
    4. public draw() {
    5. console.log("Cirlce is drawn (external module)");
    6. }
    7. }
    1. // Triangle.ts
    2. import shape = require("./IShape");
    3. export class Triangle implements shape.IShape {
    4. public draw() {
    5. console.log("Triangle is drawn (external module)");
    6. }
    7. }
    1. // TestShape.ts
    2. import shape = require("./IShape");
    3. import circle = require("./Circle");
    4. import triangle = require("./Triangle");
    5. function drawAllShapes(shapeToDraw: shape.IShape) {
    6. shapeToDraw.draw();
    7. }
    8. drawAllShapes(new circle.Circle());
    9. drawAllShapes(new triangle.Triangle());

    tsc --module amd TestShape.ts

    1. // IShape.js
    2. define(["require", "exports"], function (require, exports) {
    3. "use strict";
    4. Object.defineProperty(exports, "__esModule", { value: true });
    5. });
    1. // Circle.js
    2. define(["require", "exports"], function (require, exports) {
    3. "use strict";
    4. Object.defineProperty(exports, "__esModule", { value: true });
    5. exports.Circle = void 0;
    6. var Circle = /** @class */ (function () {
    7. function Circle() {
    8. }
    9. Circle.prototype.draw = function () {
    10. console.log("Cirlce is drawn (external module)");
    11. };
    12. return Circle;
    13. }());
    14. exports.Circle = Circle;
    15. });
    1. // Triangle.js
    2. define(["require", "exports"], function (require, exports) {
    3. "use strict";
    4. Object.defineProperty(exports, "__esModule", { value: true });
    5. exports.Triangle = void 0;
    6. var Triangle = /** @class */ (function () {
    7. function Triangle() {
    8. }
    9. Triangle.prototype.draw = function () {
    10. console.log("Triangle is drawn (external module)");
    11. };
    12. return Triangle;
    13. }());
    14. exports.Triangle = Triangle;
    15. });
    1. // TestShape.js
    2. define(["require", "exports", "./Circle", "./Triangle"], function (require, exports, circle, triangle) {
    3. "use strict";
    4. Object.defineProperty(exports, "__esModule", { value: true });
    5. function drawAllShapes(shapeToDraw) {
    6. shapeToDraw.draw();
    7. }
    8. drawAllShapes(new circle.Circle());
    9. drawAllShapes(new triangle.Triangle());
    10. });

    tsc --module commonjs TestShape.ts

    1. // IShape.js
    2. "use strict";
    3. Object.defineProperty(exports, "__esModule", { value: true });
    1. // Circle.js
    2. "use strict";
    3. Object.defineProperty(exports, "__esModule", { value: true });
    4. exports.Circle = void 0;
    5. var Circle = /** @class */ (function () {
    6. function Circle() {
    7. }
    8. Circle.prototype.draw = function () {
    9. console.log("Cirlce is drawn (external module)");
    10. };
    11. return Circle;
    12. }());
    13. exports.Circle = Circle;
    1. // Triangle.js
    2. "use strict";
    3. Object.defineProperty(exports, "__esModule", { value: true });
    4. exports.Triangle = void 0;
    5. var Triangle = /** @class */ (function () {
    6. function Triangle() {
    7. }
    8. Triangle.prototype.draw = function () {
    9. console.log("Triangle is drawn (external module)");
    10. };
    11. return Triangle;
    12. }());
    13. exports.Triangle = Triangle;
    1. // TestShape.js
    2. "use strict";
    3. Object.defineProperty(exports, "__esModule", { value: true });
    4. var circle = require("./Circle");
    5. var triangle = require("./Triangle");
    6. function drawAllShapes(shapeToDraw) {
    7. shapeToDraw.draw();
    8. }
    9. drawAllShapes(new circle.Circle());
    10. drawAllShapes(new triangle.Triangle());
    1. 声明文件以 .d.ts 为后缀
    2. keyof 是 ts 中的一个操作符,用于获取一个类型的所有键作为字符串字面量类型的集合
    1. interface Person {
    2. name: string;
    3. age: number;
    4. }
    5. type PersonKeys = keyof Person; // type PersonKeys = "name" | "age"
    6. function getPropertyValue(person: Person, key: PersonKeys): any {
    7. return person[key];
    8. }
    9. const bob: Person = {
    10. name: "Bob",
    11. age: 25
    12. };
    13. console.log(getPropertyValue(bob, "name")); // 输出: Bob
    14. console.log(getPropertyValue(bob, "age")); // 输出: 25
    15. // 下面的代码将导致编译错误,因为 "address" 不是 Person 的一个键
    16. // console.log(getPropertyValue(bob, "address"));
    17. // 报错:类型“"address"”的参数不能赋给类型“keyof Person”的参数。ts(2345)