我在 NodeJS 中的某些导入方面遇到问题。我想使用 Typescript 3.8 的新功能,例如私有字段:#myPrivateField
我不知道如何在我的班级中正确导入模块“typescript”。我尝试了很多选择,但无法解决我的问题。
我的文件 :
包.json
{
"name": "test",
"scripts": {
"start": "tsc && node --experimental-modules --es-module-specifier-resolution=node main.js"
},
"dependencies": {
"@types/node": "^13.13.2",
"app-root-path": "^3.0.0",
"fs-extra": "^9.0.0",
"tsutils": "^3.17.1"
},
"devDependencies": {
"ts-node": "~8.3.0",
"typescript": "^3.8.3"
},
"type": "module"
}
Run Code Online (Sandbox Code Playgroud)
tsconfig.json
{
"compilerOptions": {
"lib": [
"ESNext",
"es2016",
"dom",
"es5"
],
"module": "esnext",
"moduleResolution": "Node",
"sourceMap": true,
"target": "es6",
"typeRoots": [
"node_modules/@types"
]
}
}
Run Code Online (Sandbox Code Playgroud)
主要.ts
// import ts = require("typescript");
import * as ts from …
Run Code Online (Sandbox Code Playgroud) 我想从模板文字类型(自 TypeScript 4.1 起可用)中排除一些子字符串,但我不知道是否可能。
例子:
我可以定义一个类型,说“这个字符串是一个包含 2 个或更多元素的元组”,即类似于'[string, number]'
这个文字类型:
type TupleWithTwoOrMoreElements = `[${string}, ${string}]`;
Run Code Online (Sandbox Code Playgroud)
现在,我想做相反的事情,即通过排除 substring创建一个文字类型,表示“这是一个类似元组的元素少于 2 个”,
。我想做这样的事情:
type TupleWithLessThanTwoElements = `[${someStringWithoutCommaOrSpace}]`;
Run Code Online (Sandbox Code Playgroud)
我认为不可能编写这种“regex-literal-type”,但我想知道是否有人能够解决这个问题。
我想创建一个 TypeScript 类型来检查元素是否可以是字符串。
这意味着该元素可以具有“string”或“any”类型,但不能具有“number”、“boolean”、“number[]”、“Person”等类型。
我尝试使用条件类型,但我找不到如何排除“所有不可能是字符串的内容”。
我也尝试了 Exclude<any, string> 类型,但这并不完全是我想要的。
编辑
我更好地解释了我的问题:我创建了一个静态方法,如果数据是 a ,foo(data)
它将执行某些操作并返回 a ,或者如果数据不是 a ,则执行其他操作并返回 a 。string
string
number
string
为此,很简单,我可以像这样进行重载:
class FooClass {
static foo(data: string): string
static foo(data: any): number
static foo(data: any): string | number {
if (typeof data === 'string') {
return 'a';
} else {
return 2;
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,假设如果不是 a ,该foo()
方法将抛出错误。我有两个案例:data
string
如果该方法的用户不知道数据的类型(可能是 a string
),我希望他可以使用此方法,如果不是 a ,我将返回一个错误string
。
如果用户知道数据的类型(number
例如 a ),我想告诉他这是不可能的,它不可能是 …