我正在设置一个非常基本的打字稿项目,并在声明变量类型时遇到看似无关的错误。我试图表达一个变量可以是一个字符串,或者是null,或者是未定义的变量[编辑]我知道这是字符串的默认值,我试图表达这一点。使用typescript 2.0的非可空类型。这是波浪线和错误的屏幕截图:
代码(由“^^^^”s表示的违规代码):
var testMessage: string | null | undefined;
^^^^ ^^^^^^^^^
class TestClass {
testMessage: string | null | undefined;
^^^^ ^^^^^^^^^
constructor() {
}
}
错误讯息: “预期类型。算术运算的左侧必须是'any','number'或枚举类型。”
对于单个变量和类中的变量,错误是相同的,并且错误的唯一区别在于它对未定义的条目说“右侧”。
我正在使用VSCode 1.4.0。 我的文件夹结构是一个'src'和一个'dist'文件夹并排放置在我的tsconfig.json和npm包文件所在的封闭项目根文件夹中。 我有tsc看'src'文件夹并在保存时重新编译。 我使用'npm install -g typescript @ next',但'typescript @ beta'和'typescript@2.0'也是如此。 无论是否将我的工作区设置设置为从其全局安装目录中获取tsdk,都会发生此错误。 我的tsconfig.json看起来像这样:
{
"compilerOptions": {
"outDir": "./dist/",
"sourceMap": true,
"noImplicitAny": true,
"module": "commonjs",
"target": "es5",
"rootDir": "./src",
"watch": true,
"pretty": true,
"strictNullChecks": true
}
}
昨天以这种方式声明变量类型在另一个项目上正常工作,但现在该项目也有此错误。有谁知道造成这种情况的原因以及如何解决这个问题?
[编辑:我的困惑的背景] 这会在typescript 2.1 / typescript @ next:
下的另一台机器上引发错误export class SomeClass {
constructor(public someParameter: string | undefined,
public someOtherParamter: string | undefined = undefined ) {
//Some constructor code here
}
someFoo (someParam: SomeClass | SomeExtendedClass) : SomeOtherClass
{
//some code here
}
}
答案 0 :(得分:1)
回答我自己的问题,因为唯一的其他答案与我的问题的原因无关。
我的问题中的语法在typescript版本2.1.0-dev.20160810下是有效和正确的(你在撰写from typescript @ next时得到的)。问题来自我期待
'npm link typescript '
将我刚安装的新版本的打字稿与'npm install typescript @ next'链接起来。相反,它链接了默认安装的typescript版本(在我的情况下为1.8)。它是通过输入
来修复的'npm link typescript @ next '。
我尝试从npm重新安装typescript @时遇到了解决方案,并抱怨由于符号链接而无法更新。
答案 1 :(得分:0)
在打字稿中,你没有像那样声明你的变量。你可以这样说。
var name : String;
这也可以是null或undefined,很明白,当你有一个变量时,它可能还没有被使用,因此不能保存一个值(所以它可以是null或undefined)。因此,在其他语言中,您可以获得所有NullpointerExceptions
。
错误告诉你的是,你正试图在那时使用artihmetic操作。因为Typescript语法不支持您尝试执行的操作,因此它会尝试将您正在执行的操作解析为算术表达式。您正尝试将表达式string | null | undefined
的结果分配给变量testMessage
。这个'等式'对打字稿是没有意义的。你写的是bitwise OR operation
。