!:在Typescript中是什么意思?

时间:2018-06-22 08:31:39

标签: typescript vue.js

if(someconditional) {

const SignedIn = TabNavigator(
  {
    'Jobs': {
      screen: StackNavigator({
        JobListScreen: { screen: JobList },
        JobItemScreen: { screen: JobItem },
        JobDetailsScreen: { screen: JobDetails },
        EditJobScreen: { screen: EditJob },
        BusinessProfileScreen: { screen: BusinessProfile },
        UserProfileScreen: { screen: UserProfile }
      })
    },
    'Search': {
      screen: SearchBar
    },
    'New Job': {
      screen: StackNavigator({
        NewJobScreen: { screen: NewJob },
      })
    },
    'Profile': {
      screen: StackNavigator({
        Profile: {screen: Profile},
        EditProfileScreen: { screen: EditProfile}
      })
    }
  }
)

} else {
const SignedIn = TabNavigator(
  {
    'Jobs': {
      screen: StackNavigator({
        JobListScreen: { screen: JobList },
        JobItemScreen: { screen: JobItem },
        JobDetailsScreen: { screen: JobDetails },
        EditJobScreen: { screen: EditJob },
        BusinessProfileScreen: { screen: BusinessProfile },
        UserProfileScreen: { screen: UserProfile }
      })
    },
    'Search': {
      screen: SearchBar
    },
    'Profile': {
      screen: StackNavigator({
        Profile: {screen: Profile},
        EditProfileScreen: { screen: EditProfile}
      })
    }
  }
)
}

https://github.com/vuejs/vue-class-component/blob/master/example/App.vue

2 个答案:

答案 0 :(得分:16)

在某些情况下,TypeScript认为某些属性,变量将为nullundefined。但是,如果您确定此变量不能为null,则可以使用此运算符。

考虑示例:

let a = document.getElementById('hello');

if (a) {
    a.style.width = '100px';
}

TypeScript假定变量a可以为null,因为不能保证该元素存在。因此,在访问该变量之前,您已经设置了if防护。但是,如果您知道您的应用程序将始终具有id为#hello的HTML元素,则可以将上述代码重写为:

const a = document.getElementById('hello');

a!.style.width = '100px';

上面的代码更易读,更简洁。在https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-0.html

处了解更多信息。

答案 1 :(得分:1)

这是一个“明确分配断言”:varname !: sometype通知打字稿不要担心检查varname是否可能未分配(它告诉打字稿肯定会分配varname,即使打字稿无法推断其分配位置)。通常,打字稿会检查变量是否未分配,并给出错误信息。

有关更多信息,请参见:https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#definite-assignment-assertions