Does TypeCast only work on Create? What about Update?

Does typecast only work on .create? What if I want to update a mule-select field in update?
base('Sites').update([ 79 { 1 "id": recId, 2 "fields": { 3 "siteStreetAddress": {!!placeDetailsObj.street_number ? placeDetailsObj.street_number + ' ' : ''}{!!placeDetailsObj.route ? placeDetailsObj.route : ‘’}, 4 "siteCounty": {!!placeDetailsObj.administrative_area_level_2 ? placeDetailsObj.administrative_area_level_2 : ''}`, 5 "siteState": `{!!placeDetailsObj.administrative_area_level_1 ? placeDetailsObj.administrative_area_level_1 : ‘’}, 6 "siteCity": {!!placeDetailsObj.locality ? placeDetailsObj.locality : ''}`, 7 "siteZipExt": `{!!placeDetailsObj.postal_code_suffix ? placeDetailsObj.postal_code_suffix : ‘’}, 8 "siteZip": {!!placeDetailsObj.postal_code ? placeDetailsObj.postal_code : ''}`, 9 "siteNeighborhood": `{!!placeDetailsObj.neighborhood ? placeDetailsObj.neighborhood : ‘’}, 10 "siteGmapsUrl": ${!!placeDetailsObj.mapsUrl ? placeDetailsObj.mapsUrl : ‘’}, 11 "lat": placeDetailsObj.location.lat, 12 "lng": placeDetailsObj.location.lng, 13 "allGmapsTypes": placeDetailsObj.types 14 } 15 } 16 ], {typecast: true}, (err, record) => { 17 18 if (err) { 19 console.error(err); 20 return; 21 } 22 23 console.log(record.get('siteName')); 24 });

Hi, @Lean_Junio,

Yes, typecast also works when updating records.

Airtable’s API documentation for the “update” command states:

Automatic data conversion for update actions can be enabled via typecast parameter. See create record for details.

I verified this using the airtable.js library. Here’s my Node.js script:

'use strict';
var Airtable = require('airtable');

var apiKey = 'replace this string with an authentic API key';
var baseID = 'replace this string with an authentic Base ID';
var recordID = 'replace this string with an authentic record ID';

var base = new Airtable({apiKey: apiKey}).base(baseID);

base('SMS').update([
  {
    id: recordID,
    fields: {
      'my text field': '45'
    }
  }
], {typecast: false}, function(err, records) {
  if (err) {
    console.error(err);
    return;
  }
  console.log('Success!');
});

(By the way: you can improve the formatting of code blocks here on the forum by indenting the code by four spaces.)

I replaced the strings which start “replace this value” with authentic values and ran the script. The code reached the console.error statement and printed the following error:

AirtableError {
  error: 'INVALID_VALUE_FOR_COLUMN',
  message: 'Field "my text field" cannot accept the provided value',
  statusCode: 422
}

That’s because in my Base, the field named “my text field” is a text field. Airtable rejected my attempt to set it to a string value (even though the string describes a number).

But once I enabled type coercion by changing {typecast: false} to {typecast: true}, then the script reached the console.log statement and printed:

Success!

…and the value of the targeted cell was updated to the number 45 (because Airtable coerced the string value into a number value).