首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Typescript类型检查

Typescript类型检查
EN

Stack Overflow用户
提问于 2018-05-24 23:56:17
回答 3查看 325关注 0票数 0
代码语言:javascript
运行
复制
let a;
a = 5;
a = "hi";

为什么这是有效的TypeScript代码?除了«a:number»之外,还有其他更严格的设置吗?如果没有,那么如果你可以使用JavaScript + vscode //@ts- TypeScipt,那么使用检查有什么意义呢?我的tsconfig.json:

代码语言:javascript
运行
复制
"compilerOptions": {
  "baseUrl": ".",
  "outDir": "build/dist",
  "module": "esnext",
  "target": "es6",
  "lib": ["es6", "dom"],
  "sourceMap": true,
  "allowJs": false,
  "strict": true,
  "jsx": "react",
  "moduleResolution": "node",
  "rootDir": "src",
  "forceConsistentCasingInFileNames": true,
  "noImplicitReturns": true,
  "noImplicitThis": true,
  "noImplicitAny": true,
  "strictNullChecks": true,
  "suppressImplicitAnyIndexErrors": true,
  "noUnusedLocals": true
},
EN

回答 3

Stack Overflow用户

发布于 2018-05-25 00:05:52

它之所以有效,是因为noImplicitAny不影响变量声明。如果一个变量被声明了,但是它的类型没有声明,那么它就被认为是any

之所以这样定义,是因为尽管变量隐式为any,但编译器实际上可以在任何时候确定它的类型。

事实上,如果你这样做:

代码语言:javascript
运行
复制
var a;
a = 5;
a.dot(); // error, number does not have a 'dot' property.
a = "hi";
a.foo(); // error, string does not have a 'foo' property.

您会得到一个错误,指示string没有属性foo,或者number没有属性dot

但是,如果你这样写:

代码语言:javascript
运行
复制
function(b) {
    return b + 2;
}

然而,这个函数指出了一个错误,因为没有任何东西提示编译器b持有什么类型。

票数 5
EN

Stack Overflow用户

发布于 2018-05-25 00:01:47

为什么这是有效的TypeScript代码?

允许向后兼容javascript。这是完全有效的js,所以它也需要是有效的typescript。但是你可以很容易的选择类型检查:

代码语言:javascript
运行
复制
let a: number;
票数 3
EN

Stack Overflow用户

发布于 2018-05-25 00:13:32

为什么这是有效的TypeScript代码?

noImplicityAny只影响“参数”而不影响“变量”。

因此,此代码是正确的:

代码语言:javascript
运行
复制
let a;
a = 'test';
a = 123;

但是当你想要声明一个函数参数时,你会得到一个错误:

代码语言:javascript
运行
复制
function log(someArg) { // Error : someArg has an implicit `any` type
    console.log(someArg);
} 

下面的代码可以工作:

代码语言:javascript
运行
复制
function log(someArg: any | string | number) { // Error : someArg has an implicit `any` type
    console.log(someArg);
} 

TypeScript确保,当变量正在使用时,您可以使用类型并验证它们。作为参数)。

Here you can find the article.

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50513575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档