提问人:InglouriousBastard 提问时间:9/27/2023 最后编辑:InglouriousBastard 更新时间:9/28/2023 访问量:35
如何在打字稿中区分模块名称和 *main exported type*?
How do i differentiate module name from *main exported type* in typescript?
问:
我想在 TS 中使用这样的代码:
task.ts
export type Task = {
name: string
description: string
cost: number
done: boolean
}
export function increaseCost(task: Task, percent: number) {
return { ...task, cost: task.cost * (1 + percent / 100) }
}
index.ts
import {Task, increaseCost} from "./task.ts"
let task: Task = {...}
Task.increaseCost(task, 15)
Task.anotherFunction(task)
Task.yetAnotherFunction(task)
基本上我想将 Task 作为命名空间。但是类型 Task 正在干扰。
一个选项是:
task.ts
export type Task
然后
index.ts
import * as Task from "task.ts"
let task: Task.Task // this seems redundant
另一种选择:
task.ts
export type Type
index.ts
import * as Task from "task.ts"
let task: Task.Type // seems odd/weird
你会如何处理这个问题?如何区分模块/命名空间任务和任务类型?
答:
1赞
xVanTuring
9/27/2023
#1
您可以使用 or 关键字,但不再推荐使用:module
namespace
module
import { Task } from './task';
let a: Task = { cost: 10, description: '', done: false, name: '' };
console.log(Task.increaseCost(a, 10));
// task.ts
export type Task = {
name: string;
description: string;
cost: number;
done: boolean;
};
export namespace Task {
export function increaseCost(task: Task, percent: number) {
return { ...task, cost: task.cost * (1 + percent / 100) };
}
}
在线演示在这里 stackblitz 类型。(打开控制台查看结果。
评论
0赞
InglouriousBastard
9/27/2023
这正是我想要的。模块可以以某种方式替换为命名空间吗?前提是不推荐使用该模块
0赞
xVanTuring
9/27/2023
是的你可以。我会将其添加到代码中。很高兴看到它有所帮助。
评论
Task
Task
Task.increaseCost(task, 15)