打字稿对象中的不同数组

时间:2018-08-19 14:45:45

标签: typescript

我有一个对象,例如:

@Override
    public void onBindViewHolder(@NonNull     PeopleToAddAdapter.MyViewHolder holder, int position) {

    final PeopleToAdd listItem = mPeopleToAdd.get(position);
    holder.emailLbl.setText(listItem.getEmail());

    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(context, "You clicked" + listItem.getEmail(), Toast.LENGTH_LONG).show();

        }

    });
}


@Override
public int getItemCount() {
    return mPeopleToAdd.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {

    public TextView emailLbl;

    public MyViewHolder(View itemView) {
        super(itemView);
        emailLbl = (TextView) itemView.findViewById(R.id.emailLbl);
    }
}

Typescript无法定义obj的类型,我应将哪种类型分配给obj?我尝试过

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
create = (Button) findViewById(R.id.setCreate);
    create.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            createProject();
        }
    });
}
public void createProject(){
    final String subj = subject.getText().toString().trim();
    final String projectNm = projectName.getText().toString().trim();
    final String endDt = endDate.getText().toString();
    final String members = addPeople.getText().toString();



    if (TextUtils.isEmpty(subj) || TextUtils.isEmpty(projectNm) || TextUtils.isEmpty(endDt)) {

        if (subj.isEmpty()){
            Snackbar.make(findViewById(R.id.MyConstraintLayout), R.string.error_projecSubj,Snackbar.LENGTH_SHORT).show();
        }
        else if (projectNm.isEmpty()){
            Snackbar.make(findViewById(R.id.MyConstraintLayout), R.string.error_projectName,Snackbar.LENGTH_SHORT).show();
        }
        else if (endDt.isEmpty()){
            Snackbar.make(findViewById(R.id.MyConstraintLayout), R.string.error_projectDate,Snackbar.LENGTH_SHORT).show();
         }

        return;
    }
        mProgressDialog.setMessage("Creating new project...");
        mProgressDialog.show();

        DatabaseReference createNewProject = mPostDatabase.push();

        Map<String, String> dataToSave = new HashMap<>();
        dataToSave.put("subject", subj);
        dataToSave.put("projectName", projectNm);
        dataToSave.put("endDate", endDt);
        dataToSave.put("members", members);
        dataToSave.put("userid", mUser.getUid());
        dataToSave.put("creationDate", String.valueOf(java.lang.System.currentTimeMillis()));


        createNewProject.setValue(dataToSave);

        mProgressDialog.dismiss();

       startActivity(new Intent(SetProject.this, Main.class));
}

但是它不起作用,TS2322错误,有什么建议吗?

1 个答案:

答案 0 :(得分:2)

在示例类型注释obj: [number,number,number] | [string,string,string]中,打字稿看不到您是一个对象-它认为您obj 三元组或三元组-字符串元组。

我猜你想要更多这样的东西:

// inferred type is { arr1: number[], arr2: string[] }
const obj1 = {
  arr1: [100, 30, 10],
  arr2: ['hello', 'hello', 'hello']
}

// no compiler error because obj2 matches obj1
const obj2: { arr1: number[]; arr2: string[]; } = obj1