打字稿中最接近编译时常量的是const enums - 根据documentation,“常量枚举成员在使用站点内联”。 Typescript 不会删除死代码,之后您必须使用其他工具来删除 if (0 === 1) 分支。
您将需要两个不同的tsconfig.json 文件,每个文件都将包含一个对同一枚举类型具有不同定义的文件。
tsconfig.browser.json
{
"files": [
"t.ts",
"target-enum-browser.d.ts"
]
}
target-enum-browser.d.ts
declare module 'target-enum' {
export const enum Target { Node, Browser, Current = Browser }
}
tsconfig.node.json
{
"files": [
"t.ts",
"target-enum-node.d.ts"
]
}
target-enum-node.d.ts
declare module 'target-enum' {
export const enum Target { Node, Browser, Current = Node }
}
t.ts
import {Target} from 'target-enum';
if (Target.Current === Target.Browser) {
console.log('browser');
} else if (Target.Current === Target.Node) {
console.log('node');
} else {
console.log('?');
}
用tsc --project tsconfig.browser.json编译
"use strict";
exports.__esModule = true;
if (1 /* Current */ === 1 /* Browser */) {
console.log('browser');
}
else if (1 /* Current */ === 0 /* Node */) {
console.log('node');
}
else {
console.log('?');
}
用tsc --project tsconfig.node.json编译
"use strict";
exports.__esModule = true;
if (0 /* Current */ === 1 /* Browser */) {
console.log('browser');
}
else if (0 /* Current */ === 0 /* Node */) {
console.log('node');
}
else {
console.log('?');
}